当前位置: 首页 > news >正文

GO学习之 网络通信(Net/Http)

GO系列

1、GO学习之Hello World
2、GO学习之入门语法
3、GO学习之切片操作
4、GO学习之 Map 操作
5、GO学习之 结构体 操作
6、GO学习之 通道(Channel)
7、GO学习之 多线程(goroutine)
8、GO学习之 函数(Function)
9、GO学习之 接口(Interface)
10、

文章目录

  • GO系列
  • 前言
  • 一、HTTP服务端
  • 二、HTTP客户端
  • 三、第三方的 HTTP 包
  • 四、总结

前言

按照公司目前的任务,go 学习是必经之路了,虽然行业卷,不过技多不压身,依旧努力!!!
JAVA中我们可以使用 HttpClient来发起一个 Http 连接通过Tcp/Ip协议来获取数据,不过在Spring等框架中做了各种封装,例如RestTemplateOpenFeign的组件,可以很方便的发起一个网络请求,也有SpringMVC等框架供我们提供一个对外的接口。
那在 Go 语言中的网络编程非常简单和强大,内置了标准库net/http,提供了丰富的函数和类型,用于发起Http请求和 Http服务器。

一、HTTP服务端

下面示例实现了一个简单的API接口访问,首先定义一个函数(apiHandler)来处理请求,就类似于SpringMVC中的 handler 请求处理器。
然后通过Go语言提供的标准库中的net/http包中的 http定义一个接口,配置接口名为 /go,配置接口监听地址为 127.0.0.1:8080 端口。

package mainimport ("fmt""net/http"
)// 请求处理器函数
func apiHandler(response http.ResponseWriter, request *http.Request) {fmt.Println(request.RemoteAddr, "连接成功!")// 请求方式fmt.Println("method:", request.Method)// 请求路径和参数fmt.Println("url:", request.URL.Path)fmt.Println("header:", request.Header)fmt.Println("body", request.Body)// 相应response.Write([]byte("Hello, 你好,欢迎访问!!!"))
}func main() {// 通过 http 定义一个接口 http://127.0.0.1:8080/gohttp.HandleFunc("/go", apiHandler)// 监听地址和端口http.ListenAndServe("127.0.0.1:8080", nil)
}

运行结果:
通过postman访问
会发现,get 和 post 两种请求方式都支持。

二、HTTP客户端

下面的示例中,用 net/http 包中的 http 通过 Get() 方法发起请求,返回结果赋值给 resp,并用 defer 来延迟关闭连接。
定义一个 byte 类型数字,固定长度 1024,从返回体中循环读取数据给 buf,用 string 函数包装成字符串输出。

package mainimport ("fmt""io""net/http"
)func main() {resp, _ := http.Get("http://127.0.0.1:8080/go")// 关闭连接, defer 延迟关闭defer resp.Body.Close()fmt.Println("请求状态:", resp.Status)fmt.Println("请求头:", resp.Header)buf := make([]byte, 1024)for {// 接受服务器信息n, err := resp.Body.Read(buf)if err != nil && err != io.EOF {fmt.Println("请求出错:", err)} else {fmt.Println("请求成功!")result := string(buf[:n])fmt.Println("请求结果:", result)break}}
}

运行结果:

PS D:\workspaceGo\src\http> go run .\httpClient.go
请求状态: 200 OK
请求头: map[Content-Length:[37] Content-Type:[text/plain; charset=utf-8] Date:[Sun, 06 Aug 2023 15:47:04 GMT]]
请求成功!
请求结果: Hello, 你好,欢迎访问!!!

三、第三方的 HTTP 包

Go 语言还有许多第三方的 HTTP 客户端和服务器库,可以帮助我们更方便地实现 HTTP 请求和服务。一些常用的 HTTP 客户端库有 github.com/go-resty/restygithub.com/parnurzeal/gorequest 等;HTTP 服务器库有 github.com/gin-gonic/gingithub.com/gorilla/mux 等。
这些库提供了更多的功能和便利性,可以根据项目需求选择适合的库来使用。

我们首先创建了一个 resty 客户端,然后使用 R() 函数创建一个请求。接着使用 Get 方法发起一个 GET 请求,并将响应保存在 response 变量中。我们检查了响应的状态码,如果状态码不是 200,表示请求失败,我们就输出相应的提示信息。最后,我们获取了响应的内容并输出。

package mainimport ("fmt""gopkg.in/resty.v1"
)func main() {// 创建一个客户端client := resty.New()// 发送 Get 请求response, err := client.R().Get("http://127.0.0.1:8080/go")if err != nil {fmt.Println("请求失败:", err)return}// 请求响应if response.StatusCode() != 200 {fmt.Println("请求失败,状态码:", response.StatusCode())return}// 获取响应内容body := response.Body()fmt.Println("响应结果:", string(body))
}

运行结果:

PS D:\workspaceGo\src\http> go run .\httpResty.go
响应结果: Hello, 你好,欢迎访问!!!

四、总结

go-resty/resty 包提供了丰富的功能,包括发送 GET、POST、PUT、DELETE 等请求,处理请求和响应的头部、查询参数、表单数据、JSON 数据等。它还支持连接池、超时设置、重试机制等功能,是一个非常强大和方便的 HTTP 请求库,特别适合在实际开发中使用。

现阶段还是对 Go 语言的学习阶段,想必有一些地方考虑的不全面,本文示例全部是亲自手敲代码并且执行通过。
如有问题,还请指教。
评论去告诉我哦!!!一起学习一起进步!!!

相关文章:

GO学习之 网络通信(Net/Http)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、 文章目录 GO系列前言一、H…...

<dependency> idea中为什么这个变黄色

在IDE中&#xff0c;当你的代码出现黄色高亮时&#xff0c;通常表示存在警告或建议的提示。对于Maven的<dependency>标签来说&#xff0c;黄色高亮可能有以下几种原因&#xff1a; 依赖项未找到&#xff1a;黄色高亮可能表示IDE无法找到指定的依赖项。这可能是由于配置错…...

SA8000 社会责任要求之健康安全准则

【SA8000 社会责任要求之健康安全准则】 健康和安全 准则 3.1 组织应提供一个安全和健康的工作环境&#xff0c;并应采取有效的措施防止潜在的健康和安全事故和职业伤害&#xff0c;或在工作的过程中发生的或引起的疾病。基于产业相关的安全与健康的知识以及任何特定的危害&…...

SpringMVC的架构有什么优势?——控制器(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

AI和ChatGPT:人工智能的奇迹

AI和ChatGPT&#xff1a;人工智能的奇迹 引言什么是人工智能&#xff1f;ChatGPT&#xff1a;AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一项令人兴奋的…...

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…...

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展&#xff0c;3D Web应用的需求越来越多。然而&#xff0c;复杂的3D模型在Web上展示和交互通常需要大量的带宽和计算资源。为了解决这一问题&#xff0c;HOOPS技术作为一套专业的3D图形技术开发工具包&#xff0c;发挥着关键作用。本文将探讨HOOPS技术…...

【Linux 网络】 传输层协议之TCP协议 TCP的三次握手和四次挥手

TCP协议 TCP协议段格式谈谈什么是 “可靠” 和 “不可靠”TCP协议段——序号与确认序号TCP协议段——窗口大小TCP协议段 —— 六个标志位确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制TCP 的三次握手四次挥手TCP三次握手四次挥手总结图 滑动窗口流量控制拥…...

git仓库与本地暂存区的同步问题

向下同步 对于远程仓库的项目&#xff0c;初始化一个配置文件&#xff0c;配置远程仓库及相关信息&#xff0c;赋值远程仓库的地址&#xff0c;使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题&#xf…...

MATLAB算法实战应用案例精讲-【图像处理】图像分类模型-LeNetAlexNetVGG

目录 LeNet 模型介绍 模型结构 模型实现 模型特点 模型指标 AlexNet...

ArcGIS API for JavaScript 4.x 教程(二)切换基础地图图层

了解如何更改地图中的基础地图图层。 基础地图图层&#xff1a; 基础地图层是用于访问和显示来自基础地图层服务的数据的层。它为地图或场景提供视觉和地理上下文&#xff0c;通常包含具有管理边界和地名的全局数据。 基本地图图层服务提供了许多基本地图图层样式&#xff0c;例…...

SpringBoot——如何读写使用JSON文件保存的数据

文章目录 1. 将数据写入JSON文件2. 从JSON文件读取数据2.1 读取单个对象2.2 读取对象列表 1. 将数据写入JSON文件 要将数据写入JSON文件&#xff0c;可以使用Spring Boot中提供的Jackson库。Jackson库是处理JSON的Java库&#xff0c;可以轻松地将对象转换为JSON字符串&#xff…...

SDU Crypto School - 计算不可区分性1

Encryption: Computational security 1-4 主讲人&#xff1a;李增鹏&#xff08;山东大学&#xff09; 参考教材&#xff1a;Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先&#xff0c;加密方案的目的在于…...

win11 vscode torch 编译遇错

1. 错误内容&#xff1a; Failed to build pc-util ERROR: Could not build wheels for pc-util, which is required to install pyproject.toml-based projects NativeCommandExitException: Program “pip.exe” ended with non-zero exit code: 2.问题分析&#xff1a; pip出…...

Markdown系列之Flowchat流程图

一.欢迎来到我的酒馆 介绍Markdown的Flowchart流程图语法。 目录 一.欢迎来到我的酒馆二.什么是Flowchart三.更进一步 二.什么是Flowchart 2.1 Flowchart是一款基于javascript的工具&#xff0c;使用它可以用代码创建简单的流程图。具体信息可以查看flowchart官网&#xff1a;…...

小程序wx:else提示 Bad attr `wx

问题&#xff1a;以下wx:for里的wx:if &#xff0c; wx:else 会报这个错&#xff1a;Bad attr wx <scroll-view class"scroll1" scroll-x enable-flex"true"><view wx:if"{{playlist.length>0}}" class"item" wx:for"…...

halcon 学习笔记

图像的参数 图形参数 Iconic, 包括 image, region, XLD 1.1 image 图像由一个或者多个通道组成&#xff0c;是大小相同的矩阵&#xff0c;包含各种像素类型的灰度值 在图像显示界面&#xff0c;按ctrl健&#xff0c;可以查看当前的像素值 灰度图 一个通道像素点存放在一个矩…...

vscode 设置滑条颜色

1. 默认的滑条是灰黑色的&#xff0c;很难看的清 2. 左下角&#xff0c;打开VS Code 设置功能 3. 输入命令 workbench color&#xff0c;回车 4. 找到工作台&#xff1a;自定义颜色设置&#xff0c;打开设置文件 setting.json 5. 打开配置文件 6. 添加颜色配置 "workben…...

农业大数据可视化平台,让农业数据更直观展现!

农业大数据可视化平台是指利用大数据技术和可视化工具&#xff0c;对农业领域的数据进行收集、整理、分析和展示的平台。它可以帮助农业从业者更好地理解和利用农业数据&#xff0c;提高农业生产效率和决策水平。 农业大数据可视化平台通常具有以下特点和功能&#xff1a; 数据…...

【沁恒蓝牙mesh】CH58x USB功能开发记录(二)

本文主要介绍基于【沁恒蓝牙mesh】CH58x USB功能, BLE_USB 工程 解析与修改,主要实现 手机app与节点的数据双向通讯 【沁恒蓝牙mesh】CH58x USB功能开发记录(二) 1. BLE_USB 工程1.1 数据转发接口1.2 PC端测试1.3 手机APP端测试1.4 工程修改实现双向通讯1.4.1 【测试原理图…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...