如何使用 Go 获取你的 IP 地址(推荐)

 更新时间:2024年09月18日 08:51:48   作者:techlead_krischang  
在Go语言中,获取IP地址分为公共IP和私有IP两种方式,公共IP地址通过外部API获取,本文给大家介绍如何使用 Go 获取你的 IP 地址,感兴趣的朋友跟随小编一起看看吧

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

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

公共 IP 地址 vs 私有 IP 地址

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

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

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

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 地址。

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())
            }
        }
    }
}

参考来源

到此这篇关于如何使用 Go 获取你的 IP 地址的文章就介绍到这了,更多相关Go 获取 IP 地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言之重要数组类型切片(slice)make,append函数解读

    Go语言之重要数组类型切片(slice)make,append函数解读

    这篇文章主要介绍了Go语言之重要数组类型切片(slice)make,append函数用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Go defer使用时的两个常见陷阱与避免方法

    Go defer使用时的两个常见陷阱与避免方法

    这篇文章主要将带大家一起深入探讨 Go 1.20 中 defer 的优化机制,并揭示在使用 defer 时需要避免的两个常见陷阱,有需要的可以了解下
    2025-03-03
  • Go语言接口的用法详解

    Go语言接口的用法详解

    本文详细讲解了Go语言接口的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Go语言开发实现一个图片批量压缩工具

    Go语言开发实现一个图片批量压缩工具

    在日常开发和办公中,图片体积过大会带来不少困扰,本文将使用Go语言编写一个图片批量压缩工具,文中的示例代码讲解详细,需要的可以了解下
    2025-09-09
  • Go语言按字节截取字符串的方法

    Go语言按字节截取字符串的方法

    这篇文章主要介绍了Go语言按字节截取字符串的方法,涉及Go语言操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • Go for-range 的 value值地址每次都一样的原因解析

    Go for-range 的 value值地址每次都一样的原因解析

    循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型,这篇文章主要介绍了Go for-range 的 value值地址每次都一样的原因解析,需要的朋友可以参考下
    2023-05-05
  • Go语言实现常见限流算法的示例代码

    Go语言实现常见限流算法的示例代码

    计数器、滑动窗口、漏斗算法、令牌桶算法是我们常见的几个限流算法,本文将依次用Go语言实现这几个限流算法,感兴趣的可以了解一下
    2023-05-05
  • 从基础到高阶解析Go语言中数组的应用

    从基础到高阶解析Go语言中数组的应用

    在本文中,我们将从基础概念、常规操作,到高级技巧和特殊操作,带大家深入了解Go语言中数组的各个方面,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • Go语言中GMP调度模型详解

    Go语言中GMP调度模型详解

    文章解释了Go语言的GMP模型,介绍了G、M、P三者的定义、协作关系和调度策略,本文给大家介绍了Go语言中GMP调度模型,感兴趣的朋友一起看看吧
    2026-05-05
  • 以go为例探究beyla从环境变量BEYLA_OPEN_PORT发现进程原理

    以go为例探究beyla从环境变量BEYLA_OPEN_PORT发现进程原理

    这篇文章主要为大家介绍了以golang进程为例,研究beyla从环境变量BEYLA_OPEN_PORT(即通过端口)发现进程的原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论