通过Golang获取公网IP地址

在Go语言中,获取当前的外网(公网)IP地址可以通过多种方法实现。其中一种常见的方法是通过访问外部服务来获取。这些服务可以返回访问者的公网IP地址,例如 httpbin.org/ipipify.org。下面是一个简单的例子,展示了如何使用Go标准库中的net/http包和io/ioutil包来实现这一功能。

1. 示例代码

package mainimport ("fmt""io/ioutil""net/http"
)func main() {// 使用http.Get函数请求外部服务resp, err := http.Get("https://api.ipify.org")if err != nil {fmt.Printf("请求失败: %s\n", err)return}defer resp.Body.Close() // 确保关闭响应体// 读取响应体内容ip, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Printf("读取响应失败: %s\n", err)return}// 输出获取到的外网IPfmt.Printf("当前的外网IP是: %s\n", string(ip))
}

2. 如何工作

  1. 请求外部服务http.Get("https://api.ipify.org") 发送一个HTTP GET请求到 api.ipify.org,这个服务会返回访问者的公网IP地址。
  2. 读取响应ioutil.ReadAll(resp.Body) 读取响应体的内容,该内容即为公网IP地址。
  3. 输出结果:最后,程序会将获取到的公网IP地址打印出来。

3. 注意事项

  • 服务依赖:这种方法依赖于外部服务(如ipify.org)。如果服务不可用,这个方法也会失败。
  • 隐私考虑:发送请求到外部服务可能会暴露你的公网IP地址和其他相关信息给服务提供者。在使用这些服务时,请确保了解其隐私政策。
  • 错误处理:实际使用时,请确保对http.Getioutil.ReadAll可能返回的错误进行适当处理。

通过这种方式,你可以轻松地在Go程序中获取当前的外网IP地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费云服务器汇总,最长永久免费使用

随着云计算技术的快速发展,越来越多的企业和个人开始将业务迁移到云端。云服务器作为云计算的重要组成部分,以其灵活、高效、可扩展等特点受到广泛关注。然而,许多人在初次接触云服务器时,可能会对高昂的价格望而却步。为了帮助大…

GEE:绘制和对比不同地物的光谱曲线

作者:CSDN @ _养乐多_ 光谱曲线是指在不同波长范围内物体或地表特征对电磁辐射的反射、吸收或发射的表现。这些曲线展示了物体或地表在可见光、红外线、微波等电磁波段上的光谱特征。光谱曲线的形状和特征能够提供关于物体或地表的信息,可以利用光谱曲线来识别和分类不同的地…

深度学习项目中调整张量维度布局——einops.rearrange

einops.rearrange from einops import rearrange 是引用了 einops 库中的一个重要函数 rearrange。einops 是一个强大的 Python 库,特别适用于处理多维数据结构(尤其是张量),如 PyTorch 或 TensorFlow 中的张量。rearrange 函数允…

【LeetCode热题100】33. 搜索旋转排序数组(二分)

一.题目要求 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], …

Java设计模式—策略模式(商场打折)

策略这个词应该怎么理解&#xff0c;打个比方说&#xff0c;我们出门的时候会选择不同的出行方式&#xff0c;比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等&#xff0c;这些出行方式&#xff0c;每一种都是一个策略。 再比如我们去逛商场&#xff0c;商场现在正在搞活动&…

Python技能树学习-函数

题目一&#xff1a;递归调用 函数的参数&#xff1a; def dump(index, default0, *args, **kw): print(打印函数参数) print(---) print(index:, index) print(default:, default) for i, arg in enumerate(args): print(farg[{i}]:, arg) for…

Vue 样式技巧总结与整理[中级局]

SFC&#xff08;单文件组件&#xff09;由 3 个不同的实体组成&#xff1a;模板、脚本和样式。三者都很重要&#xff0c;但后者往往被忽视&#xff0c;即使它可能变得复杂&#xff0c;且经常导致挫折和 bug。 更好的理解可以改善代码审查并减少调试时间。 这里有 7 个奇技淫巧…

[StartingPoint][Tier2]Archetype

Task 1 Which TCP port is hosting a database server? (哪个端口开放了数据库服务) $ nmap 10.129.95.187 -sC --min-rate 1000 1433 Task 2 What is the name of the non-Administrative share available over SMB? (哪个非管理共享提供了SMB?) $ smbclient -N -L 1…

Rsync——远程同步命令

目录 一、关于Rsync 1.定义 2.Rsync同步方式 3.备份的方式 4.Rsync命令 5.配置源的两种表达方法 二、配置服务端与客户端的实验——下载 1.准备工作 2.服务端配置 3.客户端配置同步 4.免交互数据同步 5.源服务器删除数据是否会同步 6.可以定期执行数据同步 三、关…

JVM的简单介绍

目录 一、JVM的简单介绍 JVM的执行流程 二、JVM中的内存区域划分 1、堆&#xff08;只有一份&#xff09; 2、栈&#xff08;可能有N份&#xff09; 3、程序计数器&#xff08;可能有N份&#xff09; 4、元数据区&#xff08;只有一份&#xff09; 经典笔试题 三、JVM…

2024.3.28力扣每日一题——访问完所有房间的第一天

2024.3.28 题目来源我的题解方法一 模拟方法二 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1997 我的题解 方法一 模拟 使用一个Set存储已经访问过的房间号&#xff0c;直到Set中的元素个数等于房间数时停止模拟。 时间复杂度&#xff1a;O(day)。能够访问…

信息管理管理工程习题【1~4章】

1、将十进制68转换成二进制为&#xff08; &#xff09;&#xff0c;转换成八进制为&#xff08; &#xff09;&#xff0c;转换成十六进制为&#xff08; &#xff09;。 A. 1000100 102 40 B. 1000100 104 44 C. 1000101 102 40 D. 1000110 104 44 【答案】&#xff1a;B 2、…

如何恢复被.locked勒索病毒加密的服务器和数据库?

.locked勒索病毒有什么特点&#xff1f; .locked勒索病毒的特点主要包括以下几个方面&#xff1a; 文件加密&#xff1a;.locked勒索病毒会对受感染设备上的所有文件进行加密&#xff0c;包括图片、文档、视频和其他各种类型的重要文件。一旦文件被加密&#xff0c;文件的扩展…

淘宝商品描述API接口:轻松获取商品信息的新途径

淘宝商品描述API接口是淘宝开放平台提供的一种高效、便捷的新途径&#xff0c;旨在帮助开发者轻松获取淘宝商品的详细描述信息。通过这一接口&#xff0c;商家、开发者和用户都能获得商品标题、描述、属性、价格、图片等关键信息&#xff0c;从而满足各种业务需求。 在使用淘宝…

【Trick】AIGC翻译润色

1&#xff1a;可尝试在chat bar中提前输入以下内容&#xff1a; I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and imp…

指针的深入理解(六)

指针的深入理解&#xff08;六&#xff09; 个人主页&#xff1a;大白的编程日记 感谢遇见&#xff0c;我们一起学习进步&#xff01; 文章目录 指针的深入理解&#xff08;六&#xff09;前言一. sizeof和strlen1.1sizeof1.2strlen1.3sizeof和strlen对比 二.数组名和指针加减…

前端html+css+js常用总结快速入门

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 学习前端全套所有技术性价比低下且容易忘记&#xff0c;先入门学会所有基础的语法&#xff08;cssjsheml&#xff09;&#xff…

深度挖掘商品信息,jd.item_get API助您呈现商品全面规格参数

深度挖掘商品信息&#xff0c;特别是在电商平台上&#xff0c;对于商家、开发者和用户来说都至关重要。jd.item_get API作为京东开放平台提供的一个强大工具&#xff0c;能够帮助用户轻松获取商品的全面规格参数&#xff0c;进而为商品分析、推荐、比较等提供有力的数据支撑。 …

using和typename在C++中的用法

using关键字有两个主要用途&#xff1a; 1.类型别名&#xff1a;使用using可以为类型创建新的名称&#xff0c;这在模板编程中尤其有用。 using integer int; integer a 5; // 这里的integer就是int类型2.命名空间&#xff1a;using可以用来引入命名空间中的名字&#xff0c…

Liquid的Covenants:处理比特币脚本中的金额

1. 引言 Covenants契约是一种允许introspection自省的结构&#xff1a; 交易output可以对花费其的交易施加条件&#xff08;超出特定的“必须提供自身的有效签名和特定的公钥”&#xff09;。 Rusty Russell 之前研究过Covenants: Examining ScriptPubkeys in Bitcoin Scrip…