当前位置: 首页 > 面试题库 >

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

锺离旻
2023-03-14
问题内容

我正在使用这个名为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.Viperstruct包含未导出的字段,因此您可以像一样创建它&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