5

ユーザーが int として入力したポートを ":port" 型の文字列に変換するにはどうすればよいですか (つまり、前に ':' を付け、文字列に変換する必要があります)。出力は http.ListenAndServe() にフィードする必要があります。

4

4 に答える 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 に答える