Golang中国
package etc

import (
    "os"
    "errors"
    "path/filepath"
    "io/ioutil"
    "gopkg.in/yaml.v2"
)

var Config = &configuration{}

type configuration struct {
    ......
}

//在外部调用此方法
func New(file string) error  {
    //此处将配制信息放到Config中
}

外部引用时,etc.Config就可以了,感觉很方便

我想问的是这种方法好不好, 在golang源代码中也很少看到这种写法, 这种有什么弊端不,请大侠指点下


jimmykuu 于 2017-06-07 10:47 修改
3 回复
buscoop
#1 buscoop • 2017-06-07 09:16

在线等

heimeil
#2 heimeil • 2017-06-07 09:53

很多包都有全局变量啊,只是不直接操作,都是通过封装方法去访问,我现在config是这么用的:

import "xx/xx/config"

config.Get("xx")

里面的实现就很简单的去读一个配置文件解析到包里面设置的全局map(也可以实现把环境变量、命令行参数都读进来,我想的只用一个配置文件就够了),Get封装方法再去读这个全局map

jimmykuu
#3 jimmykuu • 2017-06-07 10:53

不好的地方是对于调用者来说不直观,要先调用 etc.New ,然后才能用 etc.Config ,万一忘了调用,或者调用了多次,传入了不同的文件名参数呢?

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。