ユーザーが 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を発行するため、エラーをキャッチしてそれを処理するだけで済みます。errornet
于 2013-07-12T17:49:49.467 に答える