自动获取本地地址,并组装host和port

代码

https://github.com/fengchunjian/goexamples/tree/master/net

//auto_join_host_port.go
package main

import (
    "fmt"
    "net"
)

func GetLocalIP() string {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        return ""
    }
    fmt.Println("net.InterfaceAddrs", addrs)

    for _, address := range addrs {
        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
            if ipnet.IP.To4() != nil {
                return ipnet.IP.String()
            }
        }
    }
    return ""
}

func main() {
    _, port, _ := net.SplitHostPort("0.0.0.0:7052")
    fmt.Println("net.SplitHostPort 0.0.0.0:7052, port", port)

    address := net.JoinHostPort(GetLocalIP(), port)
    fmt.Println("net.JoinHostPort(GetLocalIP(), port)", address)
}

编译运行

go build auto_join_host_port.go
./auto_join_host_port 
net.SplitHostPort 0.0.0.0:7052, port 7052
net.InterfaceAddrs [127.0.0.1/8 192.168.29.132/24 192.168.122.1/24 172.17.0.1/16 172.18.0.1/16 172.19.0.1/16 ::1/128 fe80::d0c4:baf2:b056:6b4a/64 fe80::42:6bff:fe53:fbbd/64 fe80::42:2ff:fe3e:6cc8/64 fe80::2c86:27ff:fee8:b2da/64 fe80::103c:a8ff:fe9f:59f7/64 fe80::48d4:6fff:fef1:c794/64 fe80::98db:66ff:fe71:67a/64 fe80::7474:d9ff:fe6a:8296/64 fe80::f06c:a0ff:feae:785b/64 fe80::bcc6:fff:fe4f:1418/64 fe80::9462:f2ff:fe30:571/64]
net.JoinHostPort(GetLocalIP(), port) 192.168.29.132:7052

参考文档

https://github.com/hyperledger/fabric/blob/release/core/peer/peer.go

推荐阅读更多精彩内容

  • 从前有一个小女孩,她进入了大学生活发现自己班里就她一个女的,感觉好孤独。开学那天一个男生主动和他说话,她没想到第一...
    Janezxl阅读 391评论 0 1
  • 我们常常思考生命的意义在于何处?在于工作?生活?赚钱?享乐?不是的。生命在于你在别处所体现出的意义与价值。人是自私...
    小周马阅读 197评论 2 0
  • 我昨天在犹豫一件事,要不要买一本大冰的新书,他的书我买了四五本,统统没有留下,而是送了出去。说不清楚,只是觉的,故...
    七令阅读 804评论 1 1
  • 华生问福尔摩斯,咱俩形影不离,可为什么每次都是你先弄明白案件真相,福尔摩斯说因为我总在观察,华生说,我也在观察,霍...
    读图笔记丶阅读 143评论 0 0