怎样做交互式网站,互联网运营主要做什么,网页制作与网站建设宝典扫描版pdf,网络推广方案模板简介 应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。 但是在实际开发中#xff0c;如果同一台机器运行多个项目#xff0c;设置环境变量容易冲突#xff0c;不实用。godotenv库从.env文件中读取配置#xff0c;…简介 应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。 但是在实际开发中如果同一台机器运行多个项目设置环境变量容易冲突不实用。godotenv库从.env文件中读取配置 然后存储到程序的环境变量中。在代码中可以使用读取非常方便。godotenv源于一个 Ruby 的开源项目dotenv。
github地址https://github.com/joho/godotenv
这是一个比较简单的开源项目目前拜读了关于加载配置文件但是parse.go 文件写的比较复杂 自己手痒仿制一个
func readFile(cfgPathCol ...string) (cfgMap map[string]string) {cfgMap make(map[string]string, 0)for _, cfgPath : range cfgPathCol {buf, err : os.ReadFile(cfgPath)if err ! nil {log.Error(读取数据失败:, err)continue}rowByteBuf : []byte(\n)buf append(bytes.ReplaceAll(buf, []byte(\r\n), rowByteBuf), rowByteBuf...)for {rowEndIndex : bytes.IndexFunc(buf, func(r rune) bool {return r \n})if rowEndIndex 0 {break}rowByte : buf[0:rowEndIndex]k, v : FormateKeyValuePair(rowByte)if len(k) ! 0 {cfgMap[k] v}buf buf[rowEndIndex1:]}}return
}func FormateKeyValuePair(rowBuf []byte) (key string, value string) {key value if rowBuf nil || len(rowBuf) 0 {return}rowStr : string(rowBuf)rowCfgArr : SplitByChars(rowStr, , :)if rowCfgArr nil || len(rowCfgArr) 1 {return}key strings.TrimFunc(rowCfgArr[0], func(r rune) bool {return unicode.IsSpace(r)})value strings.TrimFunc(rowCfgArr[1], func(r rune) bool {return unicode.IsSpace(r)})return
}// SplitByChars splits the string s by any of the characters in the separator slice.
func SplitByChars(s string, separators ...rune) []string {var result []stringif separators nil || len(separators) 0 {result append(result, s)return result}start : 0for i, r : range s {// 检查当前字符是否是分隔符之一isSeparator : falsefor _, sep : range separators {if r sep {isSeparator truebreak}}if isSeparator {// 如果是分隔符添加从开始到当前位置不包括分隔符的子字符串到结果切片if start i {result append(result, s[start:i])}// 更新起始位置为当前位置1即跳过分隔符start i 1}}// 添加最后一个部分如果存在if start len(s) {result append(result, s[start:])}return result
}