我想在net.Listener中放入字符串,但出现错误:
./server.go:26:23: cannot use mainServer (type interface {}) as type string in argument to net.Listen: need type assertion
./server.go:27:28: cannot use gpServer (type interface {}) as type string in argument to net.Listen: need type assertion
它是我的代码:
viper.SetConfigFile("config.json")
viper.AddConfigPath(".")
viper.SetConfigName("config")
viper.ReadInConfig()
fmt.Printf("Using config: %s\n", viper.ConfigFileUsed())
mainServer := viper.Get("mainServer.port")
gpServer := viper.Get("gpServer.port")
fmt.Println(mainServer,gpServer)
fmt.Println("started main server")
ln, _ := net.Listen("tcp", mainServer)
gp_conn, _ := net.Listen("tcp", gpServer)
将其设置为我的config.json:
"mainServer": {
"host": "",
"port": ":2323",
"enabled": true
},
"gpServer": {
"host": "",
"port": ":3232",
"enabled": true
}
}
有人可以解释一下我如何将字符串转换为net.TCPListener Type吗? tnx
答案 0 :(得分:0)
根据文档,我相信方法viper.GetString
比viper.Get
更好地工作:
供您参考,您可以在这里查看以下内容:https://godoc.org/github.com/spf13/viper
mainServer := viper.GetString("mainServer.port")
gpServer := viper.GetString("gpServer.port")
但是,您可以直接声明类型... 请记住,这是不明智的选择,您不应该这样做,因为如果该类型不是字符串,并且viper具有上面使用的便捷方法,这会导致恐慌。
ln, _ := net.Listen("tcp", mainServer.(string))
gp_conn, _ := net.Listen("tcp", gpServer.(string))