github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/network/interface.go (about) 1 package network 2 3 import ( 4 "fmt" 5 "net" 6 ) 7 8 // GetFirstAddressOf returns the first IPv4 address of the supplied interface name. 9 func GetFirstAddressOf(name string) (string, error) { 10 inf, err := net.InterfaceByName(name) 11 if err != nil { 12 return "", err 13 } 14 15 addrs, err := inf.Addrs() 16 if err != nil { 17 return "", err 18 } 19 if len(addrs) <= 0 { 20 return "", fmt.Errorf("No address found for %s", name) 21 } 22 23 for _, addr := range addrs { 24 switch v := addr.(type) { 25 case *net.IPNet: 26 if ip := v.IP.To4(); ip != nil { 27 return v.IP.String(), nil 28 } 29 } 30 } 31 32 return "", fmt.Errorf("No address found for %s", name) 33 }