如何使用 Go 获取你的 IP 地址

一个 IP 地址(互联网协议地址)是分配给连接到网络的设备的唯一标识符,允许它们通过互联网或局域网与其他设备通信。

如何使用 Go 获取你的 IP 地址呢?

公共 IP 地址 vs 私有 IP 地址

公共 IP 地址 是分配给连接互联网的设备的,用于全球访问。它对互联网上的所有人可见,并用于外部识别设备。相反,私有(本地)IP 地址用于在私有网络内识别设备,仅在该私有网络内用于通信,外部不可见。

如何在 Go 中获取公共 IP 地址

在 Go 中,可以使用 net/http 包发起 HTTP 请求,从外部 API 获取公共 IP 地址。

go 复制代码
package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    response, err := http.Get("https://api.ipquery.io")
    if err != nil {
        fmt.Println("获取公共 IP 时出错:", err)
        return
    }
    defer response.Body.Close()

    body, _ := ioutil.ReadAll(response.Body)
    fmt.Println("- IP 地址:", string(body))
}

如何在 Go 中获取本地 IP 地址

要获取本地 IP 地址,可以使用 net 包并检索网络接口,检查系统的本地 IP 地址。

go 复制代码
package main

import (
    "fmt"
    "net"
)

func main() {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        fmt.Println("出错:", err)
        return
    }

    for _, addr := range addrs {
        if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
            if ipnet.IP.To4() != nil {
                fmt.Println("- IP 地址:", ipnet.IP.String())
            }
        }
    }
}
参考来源
相关推荐
yinke小琪19 小时前
面试官:如何决定使用 HashMap 还是 TreeMap?
java·后端·面试
Value_Think_Power19 小时前
golang function 什么时候需要 传 ctx context.Context, 什么时候不需要
后端
渣瓦圈19 小时前
深入浅出Redis-Redis 8性能与内存效率显著提升的原因
后端
数据知道19 小时前
Go语言设计模式:建造者模式详解
设计模式·golang·建造者模式
若疆赤云online19 小时前
SpringGateway处理跨域
java·开发语言
Every exam must be19 小时前
10.27 JS学习12
开发语言·javascript·学习
忧郁的蛋~19 小时前
ASP.NET Core中创建中间件的几种方式
后端·中间件·asp.net
元直数字电路验证19 小时前
在ASP.NET Core Web APP(MVC)开发中,如何处理Docker容器的持久化数据?
后端·docker·asp.net
雾里云山19 小时前
pgsql常用函数
java·开发语言·数据库·sql
星期天要睡觉19 小时前
提示词(Prompt)——链式思维提示词(Chain-of-Thought Prompting)在大模型中的调用(以 Qwen 模型为例)
开发语言·人工智能·python·语言模型·prompt