golang目前写命令行项目,直接可以编译为二进制文件,已经成为绝对的大杀器,目前项目中有一些端口操作的功能,我整理了以下函数,这些均为自己封装的基础函数,实际项目中已应用,可以放心使用
//GeneratePort 生成一个可用端口
func GeneratePort() (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
}
// PortInUse 检测端口是否在使用中
func PortInUse(port int, hostname string) bool {
return ScanPort("tcp", hostname, port)
}
// PortLocalInUse 检测本地端口是否在使用中
func PortLocalInUse(port int) bool {
return ScanPort("tcp", "127.0.0.1", port)
}
// ScanPort 扫描端口
func ScanPort(protocol string, hostname string, port int) bool {
fmt.Printf("scanning port %d \n", port)
p := strconv.Itoa(port)
addr := net.JoinHostPort(hostname, p)
conn, err := net.DialTimeout(protocol, addr, 3*time.Second)
if err != nil {
return false
}
fmt.Printf("scanning port %v \n", conn)
defer conn.Close()
return true
}