在微服务中,服务注册里面会把服务的一些基本信息,如 IP
,Port
,Name
发送到注册中心内保存起来。
在Api Gateway 调用某些服务的时,在注册中心内取该服务下该服务所有注册的IP、端口然后尝试链接。那么我们如何获取主机IP呢?
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package main
import (
"log"
"net"
"strings"
)
func main() {
localIp := getLocalIpV4()
log.Println("主机当前IPv4 ", localIp)
}
// getLocalIpV4 获取 IPV4 IP,没有则返回空
func getLocalIpV4() string {
inters, err := net.Interfaces()
if err != nil {
panic(err)
}
for _, inter := range inters {
// 判断网卡是否开启,过滤本地环回接口
if inter.Flags&net.FlagUp != 0 && !strings.HasPrefix(inter.Name, "lo") {
// 获取网卡下所有的地址
addrs, err := inter.Addrs()
if err != nil {
continue
}
for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
//判断是否存在IPV4 IP 如果没有过滤
if ipnet.IP.To4() != nil {
return ipnet.IP.String()
}
}
}
}
}
return ""
}
|