我正在使用这个名为的配置库Viper https://github.com/spf13/viper
在我的主要内容中,我有这个:
viper.SetConfigName("development")
viper.AddConfigPath("config/settings/")
err := viper.ReadInConfig()
if err != nil {
fmt.Println("viper config read error %v", err)
}
然后我有一个以 viper 作为参数的结构:
type MyConfig struct {
v *viper.Viper
}
在我的 main 中,我有一个返回此 MyConfig 的函数,如下所示:
func NewMyConfig(v *viper.Viper) *MyConfig {
return &MyConfig{v: v}
}
我收到此错误:
./main.go:55: use of package viper without selector
不确定我应该做什么?
当你import https://golang.org/ref/spec#Import_declarations像这样的包
import "github.com/spf13/viper"
包名称(即viper
在这种情况下)将作为新的标识符提供给您。您可以使用此标识符来构造合格标识符 https://golang.org/ref/spec#Qualified_identifiers参考导出的标识符 https://golang.org/ref/spec#Exported_identifiers包的名称(以大写字母开头的标识符)。
包名本身不能单独使用。给你错误的行:
myConfig = NewMyConfig(&viper)
您使用了包名称viper
无需指定您要从包中引用的导出标识符。
你想用你的NewMyConfig()
函数获取指向新值的指针MyConfig
结构。你的NewMyConfig()
函数期望值为*viper.Viper
。自从viper.Viper
struct 包含未导出的字段,您可以像这样创建它&viper.Viper{}
,但是viper
包导出一个函数viper.New() https://godoc.org/github.com/spf13/viper#New它可用于获取指向新的、已初始化的指针viper.Viper
价值。您可以像这样使用它:
vp := viper.New()
myConfig = NewMyConfig(vp)
请注意,viper
包声明一个内部的、全局的、未导出的viper.Viper
“实例”。有很多出口的功能那场比赛methods of the viper.Viper
类型。这些“匹配”函数适用于全局、未导出的viper.Viper
实例。所以你可以选择使用所有导出的全局函数viper
打包,或者创建您自己的Viper
实例,然后继续使用它的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)