【Golang】ローカルのIPアドレスを取得する【複数NIC対応】


Go 言語(以下 Golang)で作成したアプリを実行しているマシンのローカル IP アドレスが知りたい

複数の NIC(ネットワークカード)がある場合でも、外部からアクセス可能な方の IP アドレスが知りたい。

「"golang" ローカルのIPアドレスを取得する」でググっても、タイトルからわかるドンピシャの記事がなかったので、自分のググラビリティとして。

TL; DR (今北産業)

import "net"

// GetOutboundIP returns the outbound IP address of this machine.
func GetOutboundIP() (string, error) {
	// net.Dial で一度外部にアクセスして、使用したネットワークカードの
	// 情報を取得する。アクセス先は、存在する IP アドレスであれば
	// 8.8.8.8 でなくても構わない。
	conn, err := net.Dial("udp", "8.8.8.8:80")
	if err != nil {
		return "", err
	}

	defer conn.Close()

	// 使用しているネットワークカードのローカル IP を取得
	localAddr := conn.LocalAddr().(*net.UDPAddr)

	return localAddr.IP.String(), nil
}