dongshi6529 2016-05-03 02:06
浏览 195
已采纳

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

I'm using this config library called Viper

In my main I have this:

viper.SetConfigName("development")
viper.AddConfigPath("config/settings/")
err := viper.ReadInConfig()
if err != nil {
    fmt.Println("viper config read error %v", err)
}

I then have a struct that takes a viper as parameter:

type MyConfig struct {
  v *viper.Viper
}

In my main I have a function that returns this MyConfig like:

func NewMyConfig(v *viper.Viper) *MyConfig {
    return &MyConfig{v: v}
}

I am getting this error:

./main.go:55: use of package viper without selector

Not sure what I should be doing?

  • 写回答

1条回答 默认 最新

  • dounanyin3179 2016-05-03 03:22
    关注

    When you import a package like

    import "github.com/spf13/viper"
    

    the package name (which is viper in this case) will be available to you as a new identifier. You may use this identifier to construct qualified identifiers to refer to exported identifiers of the package (identifiers that start wtih an uppercase letter).

    The package name itself cannot be used by itself. The line that gives you error:

    myConfig = NewMyConfig(&viper)
    

    You used package name viper without specifying what exported identifier you want to refer to from the package.

    You want to use your NewMyConfig() function to obtain a pointer to a new value of your MyConfig struct. Your NewMyConfig() function expects a value of *viper.Viper. Since the viper.Viper struct contains unexported fields, you can just create it like &viper.Viper{}, but the viper package exports a function viper.New() which can be used to obtain a pointer to a new, initialized viper.Viper value. You may use it like:

    vp := viper.New()
    myConfig = NewMyConfig(vp)
    

    Note that the viper package declares an internal, global, unexported viper.Viper "instance". There are many exported functions that match methods of the viper.Viper type. These "matching" functions work on the global, unexported viper.Viper instance. So you may choose to use all the exported global functions of the viper package, or create your own Viper instance and then keep using its methods afterwards.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)