当前位置: 首页 > 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 【测试原理图…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...