package config import ( "fmt" "net" ) type Config struct { DeviceName string Port string LocalIP string FilePath string Version string } var G Config // 本地ip func GetLocalIP() (string, error) { addrs, err := net.InterfaceAddrs() if err != nil { return "", err } var ips []string for _, address := range addrs { if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { ips = append(ips, ipnet.IP.String()) } } } if len(ips) == 0 { return "", fmt.Errorf("get local ip failed") } else if len(ips) == 1 { return ips[0], nil } else { // Select the one connected to the network // when there are multiple network interfaces // Is there a better way? c, err := net.Dial("udp", "8.8.8.8:80") if err != nil { return ips[0], nil } defer c.Close() return c.LocalAddr().(*net.UDPAddr).IP.String(), nil } }