ユーザーが int として入力したポートを ":port" 型の文字列に変換するにはどうすればよいですか (つまり、前に ':' を付け、文字列に変換する必要があります)。出力は http.ListenAndServe() にフィードする必要があります。
質問する
2956 次
4 に答える
3
if err := http.ListenAndServe(fmt.Sprintf(":%d", port), handler); err != nil {
log.Fatal(err)
}
于 2013-07-12T05:37:04.067 に答える
-1
flag.Int
を取得するようなものを使用していると思いますint
。
port int
引数として取る代わりに、代わりに取ることを検討してください。address string
ここで、アドレスはhost[:port]
ポートがオプションである場合があります。
次のような関数を使用して、ポートが指定されているかどうかを判断できます。
func hasPort(s string) bool {
return strings.LastIndex(s, ":") > strings.LastIndex(s, "]")
}
(上記は /src/pkg/net/http/client.go から借用)
これは、IPv6 アドレスでも機能します。
その関数を使用すると、次のことができます。
if !hasPort(addr) {
addr += ":80"
}
log.Fatal(http.ListenAndServe(addr, nil))
intを変換する必要がある場合strconv.Itoa
は、行く方法です。リフレクションを使用して型を決定するため、 の使用は避けたいと考えてfmt
います。これは、既に型を知っている静的な型付けが与えられているためです。
アドレス自体を検証する限り、net
によって使用されるパッケージは、アドレスが によって理解される形式でない場合にhttp
を発行するため、エラーをキャッチしてそれを処理するだけで済みます。error
net
于 2013-07-12T17:49:49.467 に答える