概要
以下、自分用のメモです。以下のブログ記事にて知りました。感謝!
内容としては上のブログ記事様の方を見たほうが分かりやすいですw
以下は、忘れないように自分のためのメモ。
Goで通信する際にアドレスを host:port
の形式で作りますが、今まで普通に文字列結合して作っていました。
これでも大丈夫だと思いますが、netパッケージの方に専用の関数が用意されています。(知らなかったです)
この関数を使うと、IPv6の場合でもちゃんと変換してくれるので、こちらを使った方が良いですね。
ポート番号を文字列で指定する必要があることに注意。
サンプル
package network import ( "net" "strconv" "github.com/devlights/gomy/output" ) // JoinHostPort は、net.JoinHostPort のサンプルです。 // // 文字列結合で 127.0.0.1:9999 という形を作っても問題はないが // IPv6の場合は [::1]:9999 とする必要があるため、net.JoinHostPort() を // 利用した方が間違いが少なくなる。 // // 逆に分割したい場合は、同じように net.SplitHostPort を使った方が良い。 // // # References // - https://blog.lufia.org/entry/2022/12/16/205728 // - https://pkg.go.dev/net@go1.19.4#JoinHostPort func JoinHostPort() error { var ( hosts = []string{ "", "127.0.0.1", "localhost", "::1", } port = strconv.Itoa(9999) ) for _, host := range hosts { addr := net.JoinHostPort(host, port) output.Stdoutl("[JoinHostPort]", addr) } return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ task run task: [run] go run . -onetime ENTER EXAMPLE NAME: network_join_host_port [Name] "network_join_host_port" [JoinHostPort] :9999 [JoinHostPort] 127.0.0.1:9999 [JoinHostPort] localhost:9999 [JoinHostPort] [::1]:9999 [Elapsed] 35.22µs
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。