为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
蛊毒传说 2022-01-10 10:30:24
我正在使用这个名为Viper 的配置库在我的主要我有这个:viper.SetConfigName("development")viper.AddConfigPath("config/settings/")err := viper.ReadInConfig()if err != nil {    fmt.Println("viper config read error %v", err)}然后我有一个以毒蛇为参数的结构: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不确定我应该做什么?
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

当你导入一个包时


import "github.com/spf13/viper"

包名称(viper在这种情况下)将作为新标识符提供给您。您可以使用此标识符来构造限定标识符以引用包的导出标识符(以大写字母开头的标识符)。


包名本身不能单独使用。给你错误的行:


myConfig = NewMyConfig(&viper)

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


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


vp := viper.New()

myConfig = NewMyConfig(vp)

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


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信