いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-281 (net.JoinHostPortを使ってアドレスを作る)

概要

以下、自分用のメモです。以下のブログ記事にて知りました。感謝!

blog.lufia.org

内容としては上のブログ記事様の方を見たほうが分かりやすいです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

参考情報

blog.lufia.org

pkg.go.dev

github.com

Go言語による並行処理

Go言語による並行処理

Amazon


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。