在 Golang 中获取本机 IP 地址的方法有:使用 net 包的 Interfaces 函数遍历网络接口并获取启用且非回路接口的 IP 地址。使用 syscall 包的 Getsockopt 函数获取套接字选项,其中包含本机 IP 地址。
如何获取 Golang 本机 IP
在 Golang 中有多种方法可以获取本机 IP 地址。
1. 使用 net 包
net 包提供了 Interfaces 函数,可以返回系统中所有网络接口的信息。我们可以使用它来查找本机 IP 地址。
立即学习“go语言免费学习笔记(深入)”;
import ( "fmt" "log" "net" ) func main() { // 获取所有网络接口信息 interfaces, err := net.Interfaces() if err != nil { log.Fatal(err) } // 遍历所有接口 for _, iface := range interfaces { // 检查接口是否启用并且不是回路接口 if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 { continue } // 获取该接口的地址 addrs, err := iface.Addrs() if err != nil { log.Fatal(err) } // 输出 IP 地址 for _, addr := range addrs { ip, ok := addr.(*net.IPNet) if !ok { continue } fmt.Println(ip.IP.String()) } } }
2. 使用 syscall 包
syscall 包提供了 Getsockopt 函数,可以获取套接字选项。我们可以使用它来获取本机 IP 地址。
import ( "fmt" "net" "syscall" ) func main() { // 创建 Socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, 0) if err != nil { log.Fatal(err) } defer syscall.Close(fd) // 绑定 Socket 到本地地址 addr := &syscall.SockaddrInet4{ Port: 0, } err = syscall.Bind(fd, addr) if err != nil { log.Fatal(err) } // 获取套接字选项,其中包括本机 IP 地址 var ifreq syscall.Ifreq copy(ifreq.Name[:], []byte("eth0")) // 接口名称,可以根据实际情况修改 err = syscall.Getsockopt(fd, syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, uintptr(unsafe.Pointer(&ifreq))) if err != nil { log.Fatal(err) } // 解析 IP 地址 ip := net.ParseIP(syscall.InetNtop4(ifreq.Addr[:], 0)) // 输出 IP 地址 fmt.Println(ip.String()) }
以上就是golang怎么获取本机ip的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号