我想获取计算机的IP地址.我使用了下面的代码,但它返回127.0.0.1.

我想得到IP地址,比如10.32.10.111,而不是环回地址.

name, err := os.Hostname()
if err != nil {
     fmt.Printf("Oops: %v\n", err)
     return
}

addrs, err := net.LookupHost(name)
if err != nil {
    fmt.Printf("Oops: %v\n", err)
    return
}

for _, a := range addrs {
    fmt.Println(a)
}  

推荐答案

您需要在所有网络接口之间循环

ifaces, err := net.Interfaces()
// handle err
for _, i := range ifaces {
    addrs, err := i.Addrs()
    // handle err
    for _, addr := range addrs {
        var ip net.IP
        switch v := addr.(type) {
        case *net.IPNet:
                ip = v.IP
        case *net.IPAddr:
                ip = v.IP
        }
        // process IP address
    }
}

Play(摘自util/helper.go)

Go相关问答推荐

语法-for循环中的initit陈述是否允许分配?

在保留额外参数的同时解封YAML

如何使用我的 struct 化日志(log)记录格式使人panic ?

在Uber FX中实现后台进程正常关闭的正确方式是什么?

我可以在Golang中的另一个类型参数的基础上约束一个类型的参数吗?

如何在出现错误时停止从通道读取?

Golang Gorm Fiber / argon2.Config 未定义

从 wincrypt API 到 Go 的 RC2 解密

优化方式中所有可能组合的字符串相似度

Go安装成功但没有输出简单的Hello World

当我使用 CircleCI 构建 Go Image 时,我得到runtime/cgo: pthread_create failed: Operation not allowed

如何为ANTLR4目标Go调试监听器

闭包所处的环境范围是什么?

在 .go 文件中运行一个函数和在 Go 模板中调用它有什么区别?

Golang并发写入多个文件

Golang泛型在用作 map 元素时不起作用

如何在 Windows 中使用 github.com/AllenDang/giu 和 github.com/gordonklaus/portaudio 构建 GO 程序

如何在循环中旋转图像以便在 golang 中创建 GIF?

将 Simple Go Web 应用程序部署到 Elastic Beanstalk

如何从 docker-compose 命令运行 2 个不同的命令: