go的HTTP网络编程

欢迎大家到我的博客浏览。go的HTTP网络编程 | YinKai's Blog

go的HTTP网络编程

1、http编程--server示例

package main
​
import ("fmt""net/http"
)
​
func main() {// 注册处理函数,定义 URL 路由和对应的处理函数http.HandleFunc("/", Hello)         // 根路径 "/" 的请求交给 Hello 函数处理http.HandleFunc("/login", Login)   // "/login" 路径的请求交给 Login 函数处理
​// 启动 HTTP 服务器,监听指定的地址和端口err := http.ListenAndServe("0.0.0.0:8080", nil)   // 启动服务器,监听地址 "0.0.0.0:8080",使用默认的路由器和处理器if err != nil {fmt.Println("HTTP 服务器启动失败", err)}
}
​
func Hello(w http.ResponseWriter, r *http.Request) {// 处理根路径 "/" 的请求fmt.Fprintf(w, "Hello, World!")   // 将 "Hello, World!" 写入 http.ResponseWriter,作为 HTTP 响应的内容
}
​
func Login(w http.ResponseWriter, r *http.Request) {// 处理 "/login" 路径的请求fmt.Fprintf(w, "Login page")   // 将 "Login page" 写入 http.ResponseWriter,作为 HTTP 响应的内容
}
​

示例说明:

  • http.HandleFunc("/", Hello):注册处理函数 Hello,将根路径 "/" 的请求交给 Hello 函数处理。

  • http.HandleFunc("/login", Login):注册处理函数 Login,将 "/login" 路径的请求交给 Login 函数处理。

  • http.ListenAndServe("0.0.0.0:8080", nil):启动一个 HTTP 服务器,监听地址为 "0.0.0.0:8080",传入 nil 作为处理器,表示使用默认的路由器和处理器。

  • Hello 函数和 Login 函数分别是处理根路径和 "/login" 路径请求的处理函数,它们接收一个 http.ResponseWriter 和一个 http.Request 参数,分别用于写入响应和读取请求信息。

  • fmt.Fprintf(w, ...):使用 Fprintf 函数将字符串写入到 http.ResponseWriter 中,作为 HTTP 响应的内容。

2、http编程--Client示例

package main
​
import ("fmt""io/ioutil""net/http"
)
​
func main() {// 创建一个 HTTP 客户端client := http.Client{}
​// 构建 GET 请求req, err := http.NewRequest("GET", "https://www.example.com", nil)if err != nil {fmt.Println("创建请求失败", err)return}
​// 发送请求res, err := client.Do(req)if err != nil {fmt.Println("请求失败", err)return}defer res.Body.Close() // 在函数结束时关闭响应的 Body
​// 读取响应的内容data, err := ioutil.ReadAll(res.Body)if err != nil {fmt.Println("读取响应失败", err)return}
​// 输出响应的内容fmt.Println(string(data))
}

示例说明:

  • http.Client{}:创建一个 HTTP 客户端,用于发送 HTTP 请求。

  • http.NewRequest("GET", "https://www.example.com", nil):构建一个 GET 请求,并指定请求的 URL、请求方法和请求体。

  • client.Do(req):发送请求并获取响应,返回一个 http.Response 对象。

  • defer res.Body.Close():在函数结束时关闭响应的 Body,确保资源被正确释放。

  • ioutil.ReadAll(res.Body):从响应的 Body 中读取内容,返回一个字节数组。

  • fmt.Println(string(data)):将读取到的响应内容转换为字符串并输出。

3、常见HTTP请求方法

  1. GET:从服务器获取资源。客户端向服务器请求获取指定 URL 对应的资源,并从服务器返回该资源的内容。GET 请求通常用于获取数据,而不对服务器上的资源进行修改。

  2. POST:向服务器提交数据。客户端向服务器提交数据,请求服务器对该数据进行处理。POST 请求通常用于向服务器提交数据,如表单数据、上传文件等。

  3. PUT:更新服务器上的资源。客户端向服务器传送数据,请求服务器更新指定 URL 对应的资源。PUT 请求通常用于更新资源。

  4. DELETE:删除服务器上的资源。客户端向服务器请求删除指定 URL 对应的资源。DELETE 请求通常用于删除资源。

  5. HEAD:类似于 GET 请求,但只返回响应头部,不返回响应体。用于获取资源的元信息,如文件大小、文件类型等,而不获取实际的资源内容。

  6. OPTIONS:请求服务器返回对指定 URL 支持的通信选项。服务器将返回支持的 HTTP 请求方法、头部字段等信息,用于客户端了解服务器的功能和约束。

  7. PATCH:对服务器上的资源进行部分更新。客户端向服务器传送数据,请求服务器对指定 URL 对应的资源进行部分更新。

  8. CONNECT:建立网络隧道。通常用于代理服务器,用于在客户端和目标服务器之间建立隧道,用于安全的加密通信。

  9. TRACE:用于调试,请求服务器返回对请求和响应的诊断信息。不常用于实际生产环境。

4、下面是一个简单的 Go 语言程序,演示了如何使用 HTTP 请求方法进行基本的 HTTP 请求:

package main
​
import ("fmt""net/http""io/ioutil"
)
​
func main() {// GET 请求示例resp, err := http.Get("https://jsonplaceholder.typicode.com/posts/1") // 发起 GET 请求if err != nil {fmt.Println("GET 请求错误:", err)return}defer resp.Body.Close() // 确保在函数退出前关闭响应体
​data, err := ioutil.ReadAll(resp.Body) // 读取响应体数据if err != nil {fmt.Println("读取响应数据错误:", err)return}
​fmt.Println("GET 请求响应数据:", string(data)) // 打印响应数据
​// POST 请求示例resp, err = http.Post("https://jsonplaceholder.typicode.com/posts", "application/json", nil) // 发起 POST 请求if err != nil {fmt.Println("POST 请求错误:", err)return}defer resp.Body.Close()
​data, err = ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("读取响应数据错误:", err)return}
​fmt.Println("POST 请求响应数据:", string(data))
​// PUT 请求示例req, err := http.NewRequest("PUT", "https://jsonplaceholder.typicode.com/posts/1", nil) // 创建 PUT 请求if err != nil {fmt.Println("创建 PUT 请求错误:", err)return}
​client := &http.Client{}resp, err = client.Do(req) // 发起 PUT 请求if err != nil {fmt.Println("PUT 请求错误:", err)return}defer resp.Body.Close()
​data, err = ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("读取响应数据错误:", err)return}
​fmt.Println("PUT 请求响应数据:", string(data))
​// DELETE 请求示例req, err = http.NewRequest("DELETE", "https://jsonplaceholder.typicode.com/posts/1", nil) // 创建 DELETE 请求if err != nil {fmt.Println("创建 DELETE 请求错误:", err)return}
​resp, err = client.Do(req) // 发起 DELETE 请求if err != nil {fmt.Println("DELETE 请求错误:", err)return}defer resp.Body.Close()
​data, err = ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("读取响应数据错误:", err)return}
​fmt.Println("DELETE 请求响应数据:", string(data))
}

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

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

相关文章

redisserver一闪而过 redis闪退解决版本

1.进入Redis根目录 2.输入redis-server 或 redis-server.exe redis.windows.conf 启动redis命令,看是否成功。 执 一闪而过的问题 可能是因为已启动或者其他问题,需要重启 先输入redis-cli.exe再输入shutdown再输入redis-server.exe redis.windows.c…

扩散模型实战(十二):使用调度器DDIM反转来优化图像编辑

推荐阅读列表: 扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四&#xff…

ajax请求接口数据和显示在页面里 Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法

$.ajax({ url:"这里是你要请求的地址", data:{"id":id}, //以键/值对的形式 async : false, dataType : "json", success : function(data) { for(int i 0; i < data.length; i) { //循环后台传过来的Json数组 var datas data…

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(用户上传头像+用户收货管理)

计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现&#xff08;用户上传头像&#xff09; 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先&#xff0c;通过深入分析项目所需数据&#xff0c;包括用户、商品、商品类别、收藏、订单、购物…

redisson实现分布式锁(支持redis单例/集群)

redisson实现分布式锁 前言一、引入redisson依赖二、redis 配置三、redisson 配置1.集群配置2.单例配置 四、分布式锁使用-业务层demo 前言 还是在工作中遇到的问题&#xff1a; 1&#xff1a;新增商铺信息时&#xff0c;同一个商铺有多条信息。 异步的情况&#xff0c;根据商…

NX二次开发UF_CURVE_ask_parameterization 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_parameterization Defined in: uf_curve.h int UF_CURVE_ask_parameterization(tag_t object, double param_range [ 2 ] , int * periodicity ) overview 概述 Retu…

国产Ai大模型和chtgpt3.5的比较

下面是针对国产大模型&#xff0c;腾讯混元&#xff0c;百度文心一言&#xff0c;阿里通义千问和chatgpt的比较&#xff0c;最基础的对一篇文章的单词书进行统计&#xff0c;只有文心一言和chatgpt回答差不多&#xff0c;阿里和腾讯差太多了

深度学习中的注意力机制:原理、应用与实践

深度学习中的注意力机制&#xff1a;原理、应用与实践 摘要&#xff1a; 本文将深入探讨深度学习中的注意力机制&#xff0c;包括其原理、应用领域和实践方法。我们将通过详细的解析和代码示例&#xff0c;帮助读者更好地理解和应用注意力机制&#xff0c;从而提升深度学习模…

Vue快速实践总结 · 下篇

文章目录 组件间通信方式父 --> 子通信props插槽 子 --> 父通信&#xff08;自定义事件&#xff09;任意组件通信全局事件总线消息订阅与发布 Vuex工作原理运行环境简单使用GettersmapState与mapGettersmapActions与mapMutations模块化 命名空间 VueRouter路由的作用与分…

OpenWrt Lan口上网设置

LAN口上网设置 连接上openwrt&#xff0c;我用的 倍控N5105&#xff0c;eth0&#xff0c;看到Openwrt的IP是10.0.0.1 在 网络 -> 网口配置 -> 设置好 WAN 口和 LAN 口 初次使用经常重置 openwrt 所以我设置的是 静态IP模式 - 网络 -> 防火墙 -> 常规设置 ->…

7.私信列表 + 发送列表

目录 1.私信列表 1.1 数据访问层 1.2 业务层 1.3 表现层 1.4 私信详情 2.发送列表 2.1 数据访问层 2.2 业务层 2.3 表现层 2.4 设置已读状态 1.私信列表 私信列表&#xff1a;查询当前用户的会话列表&#xff0c;每个会话只显示一条最新的私信、支持分页列表私信详情…

苹果cms搭建教程附带免费模板

准备工作: 一台服务器域名源码安装好NGINX+PHP7.0+MYSQL5.5 安装php7.0的扩展,fileinfo和 sg11,不安装网站会搭建失败。 两个扩展都全部安装好了之后 点击-服务-重载配置 这样我们的网站环境就配置完成啦 下载苹果cms 苹果cms程序github链接:选择mac10!下载即可 http…

部署Jenkins

一、介绍 Jenkins 、Jenkins概念 Jenkins是一个功能强大的应用程序&#xff0c;允许持续集成和持续交付项目&#xff0c;无论用的是什么平台。这是一个免费的源代码&#xff0c;可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允…

自建CA实战之 《0x02 Nginx 配置 https双向认证》

自建CA实战之 《0x02 Nginx 配置 https双向认证》 上一章节我们已经实现了Nginx上配置https单向认证&#xff0c;主要场景为客户端验证服务端的身份&#xff0c;但是服务端不验证客户端的身份。 本章节我们将实现Nginx上配置https双向认证&#xff0c;主要场景为客户端验证服…

基于单片机仿指针显示的电子时钟设计

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机仿指针显示的电子时钟是一种利用单片机控制器和LED或LCD显示屏幕来模拟传统时钟指针的显示效果的设计…

PubMedBERT:生物医学自然语言处理领域的特定预训练模型

今年大语言模型的快速发展导致像BERT这样的模型都可以称作“小”模型了。Kaggle LLM比赛LLM Science Exam 的第四名就只用了deberta&#xff0c;这可以说是一个非常好的成绩了。所以说在特定的领域或者需求中&#xff0c;大语言模型并不一定就是最优的解决方案&#xff0c;“小…

01:编译lua及C调用

我们今天在windows平台编译lua&#xff0c;生成 lua动态库,lua.exe&#xff0c;luac.exe 我把这个目录上传到giee&#xff0c;使用下面命令获取它: git clone gitgitee.com:jameschenbo/lua_c_application.git 或者直接访问:访问网页 目录结构如下&#xff1a; build.cmd 是…

【离散数学】——期末刷题题库(一阶逻辑基本概念)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

开发测试利器之Fiddler网络调试工具详细安装使用教程(包含汉化脚本)

一、Fiddler简介 Fiddler 是一款功能强大的网络调试工具&#xff0c;可以帮助开发人员和测试人员分析和调试网络流量。它通过截取计算机和服务器之间的HTTP/HTTPS请求&#xff0c;并提供详细的请求和响应信息来帮助我们理解和诊断网络通信。 Fiddler 可以用于各种用途&#x…

k8s环境排查nginx转发nacos请求失败问题

一、问题背景 k8s部署两个服务,一个nginx&#xff0c;一个nacos, 服务信息如下(nacos有两个端口): 服务 serviceNameservice类型porttargetPort nodePortnginxmonitor-cp-nginxNodePort808031082nacosmonitor-cp-nacosClusterIP88488848-98489848- ng的default.conf配置文件…