package comm import ( "fmt" "log" "net" "os" "path/filepath" "strings" "time" ) func GetFreePort() (int, error) { addr, err := net.ResolveTCPAddr("tcp", "localhost:0") if err != nil { return 0, err } l, err := net.ListenTCP("tcp", addr) if err != nil { return 0, err } defer l.Close() return l.Addr().(*net.TCPAddr).Port, nil } func GetLocalIpByName(adapterName string) net.IP { ifaces, err := net.Interfaces() // handle err if err != nil { log.Println("No network:", err) return nil } for _, i := range ifaces { if strings.Contains(i.Name, adapterName) { addrs, err := i.Addrs() if err != nil { log.Println("No IP:", err) return nil } for _, addr := range addrs { var ip net.IP switch v := addr.(type) { case *net.IPNet: log.Println("IPNET") ip = v.IP case *net.IPAddr: log.Println("IPAddr") ip = v.IP } if ip[0] == 0 { log.Println("Get device:", i.Name) return ip } } } } return nil } func IsExist(path string) bool { _, err := os.Stat(path) if err != nil { if os.IsExist(err) { return true } if os.IsNotExist(err) { return false } fmt.Println(err) return false } return true } func CreateSessionId() string { t := time.Now() date := t.Format("20060102150405") return fmt.Sprintf("s%s-%d", date, t.Nanosecond()) } func GetCurrentDir() string { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { return "" } return strings.Replace(dir, "\\", "/", -1) }