package net import ( "net" "strings" ) // get internal ip func LocalIP() string { var ( err error addrs []net.Addr inters []net.Interface ) if inters, err = net.Interfaces(); err != nil { return "" } for _, inter := range inters { if inter.Flags&net.FlagUp != net.FlagUp { continue } if !strings.HasPrefix(inter.Name, "lo") { if addrs, err = inter.Addrs(); err != nil { continue } for _, addr := range addrs { if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { if ipNet.IP.To4() != nil { return ipNet.IP.String() } } } } } return "localhost" } // extract ip address func Extract(addr string) (string, error) { // if addr is already specified then it's directly returned if len(addr) > 0 && (addr != "0.0.0.0" && addr != "[::]" && addr != "::") { return addr, nil } return LocalIP(), nil }