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
等框架中做了各种封装,例如RestTemplate
,OpenFeign
的组件,可以很方便的发起一个网络请求,也有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)
}
运行结果:
会发现,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/resty
、github.com/parnurzeal/gorequest
等;HTTP 服务器库有 github.com/gin-gonic/gin
、github.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中,当你的代码出现黄色高亮时,通常表示存在警告或建议的提示。对于Maven的<dependency>标签来说,黄色高亮可能有以下几种原因: 依赖项未找到:黄色高亮可能表示IDE无法找到指定的依赖项。这可能是由于配置错…...
SA8000 社会责任要求之健康安全准则
【SA8000 社会责任要求之健康安全准则】 健康和安全 准则 3.1 组织应提供一个安全和健康的工作环境,并应采取有效的措施防止潜在的健康和安全事故和职业伤害,或在工作的过程中发生的或引起的疾病。基于产业相关的安全与健康的知识以及任何特定的危害&…...

SpringMVC的架构有什么优势?——控制器(三)
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄ÿ…...

AI和ChatGPT:人工智能的奇迹
AI和ChatGPT:人工智能的奇迹 引言什么是人工智能?ChatGPT:AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能(Artificial Intelligence,简称AI)是一项令人兴奋的…...

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

如何高性能、高效率地实现3D Web轻量化?
随着互联网和Web技术的发展,3D Web应用的需求越来越多。然而,复杂的3D模型在Web上展示和交互通常需要大量的带宽和计算资源。为了解决这一问题,HOOPS技术作为一套专业的3D图形技术开发工具包,发挥着关键作用。本文将探讨HOOPS技术…...

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

git仓库与本地暂存区的同步问题
向下同步 对于远程仓库的项目,初始化一个配置文件,配置远程仓库及相关信息,赋值远程仓库的地址,使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题…...
MATLAB算法实战应用案例精讲-【图像处理】图像分类模型-LeNetAlexNetVGG
目录 LeNet 模型介绍 模型结构 模型实现 模型特点 模型指标 AlexNet...
ArcGIS API for JavaScript 4.x 教程(二)切换基础地图图层
了解如何更改地图中的基础地图图层。 基础地图图层: 基础地图层是用于访问和显示来自基础地图层服务的数据的层。它为地图或场景提供视觉和地理上下文,通常包含具有管理边界和地名的全局数据。 基本地图图层服务提供了许多基本地图图层样式,例…...
SpringBoot——如何读写使用JSON文件保存的数据
文章目录 1. 将数据写入JSON文件2. 从JSON文件读取数据2.1 读取单个对象2.2 读取对象列表 1. 将数据写入JSON文件 要将数据写入JSON文件,可以使用Spring Boot中提供的Jackson库。Jackson库是处理JSON的Java库,可以轻松地将对象转换为JSON字符串ÿ…...

SDU Crypto School - 计算不可区分性1
Encryption: Computational security 1-4 主讲人:李增鹏(山东大学) 参考教材:Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先,加密方案的目的在于…...
win11 vscode torch 编译遇错
1. 错误内容: 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.问题分析: pip出…...

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

小程序wx:else提示 Bad attr `wx
问题:以下wx:for里的wx:if , wx:else 会报这个错: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 图像由一个或者多个通道组成,是大小相同的矩阵,包含各种像素类型的灰度值 在图像显示界面,按ctrl健,可以查看当前的像素值 灰度图 一个通道像素点存放在一个矩…...

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

农业大数据可视化平台,让农业数据更直观展现!
农业大数据可视化平台是指利用大数据技术和可视化工具,对农业领域的数据进行收集、整理、分析和展示的平台。它可以帮助农业从业者更好地理解和利用农业数据,提高农业生产效率和决策水平。 农业大数据可视化平台通常具有以下特点和功能: 数据…...
【沁恒蓝牙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 【测试原理图…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...

Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...