нельзя преобразовать строку в тип * net.TCPlistener - PullRequest
0 голосов
/ 22 марта 2019

Я хочу поместить строку в 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? Тпй

1 Ответ

0 голосов
/ 22 марта 2019

Я считаю, что метод 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...