我正在使用这个名为Viper的配置库
在我的主要我有:
viper.SetConfigName("development")
viper.AddConfigPath("config/html" target="_blank">settings/")
err := viper.ReadInConfig()
if err != nil {
fmt.Println("viper config read error %v", err)
}
然后,我有了一个以毒蛇为参数的结构:
type MyConfig struct {
v *viper.Viper
}
在我的主目录中,我有一个返回该MyConfig的函数,例如:
func NewMyConfig(v *viper.Viper) *MyConfig {
return &MyConfig{v: v}
}
我收到此错误:
./main.go:55: use of package viper without selector
不知道该怎么办?
当您导入像
import "github.com/spf13/viper"
包名称(viper
在这种情况下)将作为新标识符提供给您。您可以使用此标识符来构造合格的标识符,以引用包的导出标识符(以大写字母开头的标识符)。
程序包名称本身不能使用。出现错误的行:
myConfig = NewMyConfig(&viper)
您使用了包名称,viper
而没有指定要从包中引用的导出标识符。
您想使用NewMyConfig()
函数来获取指向MyConfig
结构新值的指针。您的NewMyConfig()
函数期望值为*viper.Viper
。由于viper.Viper
struct包含未导出的字段,因此您可以像一样创建它&viper.Viper{}
,但是viper
程序包会导出一个函数viper.New()
,该函数可用于获取指向新的初始化viper.Viper
值的指针。您可以像这样使用它:
vp := viper.New()
myConfig = NewMyConfig(vp)
请注意,viper
程序包声明了一个内部的,全局的,未导出的viper.Viper
“实例”。有许多与该类型的 方法 匹配的导出 函数
。这些“匹配”功能适用于未导出的全局实例。因此,您可以选择使用包的所有导出的全局函数,或创建自己的实例,然后在以后继续使用其方法。
__viper.Viper``viper.Viper``viper``Viper
问题内容: 我有一个MySQL数据库,其中表A与表B具有一对多关系,我想选择表B中表A中没有子项的所有行。 和 两者似乎都很慢。是否有更快的查询来实现相同的目的? 如果这是相关的,在我的数据库中,表A大约有500,000行,表B大约有3到4百万行。 编辑: 对于我的数据库中的实际表,解释给我: 为了 和 为了 在我的情况下,frontend_form471是表A,SchoolData是表B Edi
本文向大家介绍在什么情况下选择webpack?在什么情况下选择rollup?相关面试题,主要包含被问及在什么情况下选择webpack?在什么情况下选择rollup?时的应答技巧和注意事项,需要的朋友参考一下 非要一句话区分的话 如果是用,如果是用其实界限并不是特别明显。在某些特殊情况下可以互用
我刚刚通过nodejs.org上的软件包安装了node和npm,每当我试图搜索或安装npm时,它都会抛出以下错误,除非我执行该命令。我觉得这是一个权限问题?我已经是管理员了。
我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?
我正在开发一个需要执行JavaScript的Java应用程序。Nashorn JS引擎即将被弃用,取而代之的是Graal SDK提供的一组API,它利用了GraalVM。基本上执行多种语言的虚拟机。 至少我是这么想的。所以我花了一天时间试图让它工作。我下载了使用JDK 8的GraalVM rc6。我使用IntelliJ IDEA并将GraalVM添加为新的JDK。我发现我应该添加虚拟机作为开发工具
问题内容: 我正在尝试将新记录插入到我之前知道是唯一的表中。我试过在对象上调用save(),但是这样做在执行任何INSERT之前会执行一堆SELECT语句,我不想这样做,因为我知道对象已经是唯一的。 我为每个交易都打开了一个新会话,可以看到这是一个问题,但这是我的工作范围的限制。有什么办法可以强迫Hibernate在插入之前不做任何选择? 问题答案: 您可以使用persist()方法而不是sa