首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有选择器错误的情况下使用包

在没有选择器错误的情况下使用包
EN

Stack Overflow用户
提问于 2016-05-03 10:06:09
回答 1查看 68.2K关注 0票数 39

我正在使用这个名为Viper的配置库

在我的main中,我有:

代码语言:javascript
复制
viper.SetConfigName("development")
viper.AddConfigPath("config/settings/")
err := viper.ReadInConfig()
if err != nil {
    fmt.Println("viper config read error %v", err)
}

然后我有一个结构,它接受一个毒蛇作为参数:

代码语言:javascript
复制
type MyConfig struct {
  v *viper.Viper
}

在我的main中,我有一个函数返回这个MyConfig,如下所示:

代码语言:javascript
复制
func NewMyConfig(v *viper.Viper) *MyConfig {
    return &MyConfig{v: v}
}

我得到了这个错误:

代码语言:javascript
复制
./main.go:55: use of package viper without selector

不确定我该做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 11:22:55

当你import一个包的时候,比如

代码语言:javascript
复制
import "github.com/spf13/viper"

包名(在本例中为viper )将作为新的标识符提供给您。您可以使用此标识符来构造qualified identifiers,以引用包的exported identifiers (以大写字母开头的标识符)。

包名本身不能单独使用。出现错误的代码行:

代码语言:javascript
复制
myConfig = NewMyConfig(&viper)

您使用了包名viper,但没有指定要从包中引用哪个导出的标识符。

您希望使用NewMyConfig()函数来获取指向MyConfig结构的新值的指针。您的NewMyConfig()函数需要一个*viper.Viper值。因为viper.Viper结构包含未导出的字段,所以您可以像创建&viper.Viper{}一样创建它,但是viper包导出了一个函数viper.New(),该函数可用于获取指向新的初始化viper.Viper值的指针。你可以像这样使用它:

代码语言:javascript
复制
vp := viper.New()
myConfig = NewMyConfig(vp)

请注意,viper包声明了一个内部的、全局的、未导出的viper.Viper“实例”。有许多导出的函数与viper.Viper类型的方法相匹配。这些“匹配”函数作用于全局的、未导出的viper.Viper实例。因此,您可以选择使用viper包的所有导出的全局函数,或者创建自己的Viper实例,然后继续使用它的方法。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36994445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档