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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With