【go从零单排】HTTP客户端和服务端

devtools/2024/11/14 10:43:05/
http://www.w3.org/2000/svg" style="display: none;">

https://i-blog.csdnimg.cn/direct/df61dcdb0b164c148917241306e0fdaa.jpeg#pic_center" alt="挪威特罗姆瑟夜景" />

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 语言中,net/http 包提供了强大的 HTTP 客户端和服务器功能。

💻代码

HTTP 客户端

package mainimport (//bufio:用于缓冲 I/O 操作,提供了扫描输入的功能。//fmt:用于格式化输入输出。//net/http:提供 HTTP 客户端和服务器的功能。"bufio""fmt""net/http"
)func main() {//使用 http.Get 方法发送 GET 请求到指定的 URL//返回一个 HTTP 响应和一个错误对象。resp, err := http.Get("https://www.baidu.com")if err != nil {panic(err)}//使用 defer 关键字确保在 main 函数结束时关闭响应体,释放资源。defer resp.Body.Close()//打印响应的状态码resp.Statusfmt.Println("Response status:", resp.Status)//创建一个新的扫描器,用于逐行读取响应体的内容。scanner := bufio.NewScanner(resp.Body)//使用循环读取响应的前五行内容。scanner.Scan() 方法返回 true 表示还有更多的内容可供读取,scanner.Text() 返回当前行的文本。for i := 0; scanner.Scan() && i < 5; i++ {fmt.Println(scanner.Text())}//检查扫描过程中是否发生错误。如果有错误,终止程序并输出错误信息。if err := scanner.Err(); err != nil {panic(err)}
}

HTTP 服务端

package mainimport ("fmt"//net/http:提供 HTTP 客户端和服务器的功能。"net/http"
)// 定义了一个名为 hello 的处理函数,它接受两个参数:
// w http.ResponseWriter:用于构建 HTTP 响应。
// req *http.Request:包含了 HTTP 请求的信息。
func hello(w http.ResponseWriter, req *http.Request) {//使用 fmt.Fprintf 向响应写入字符串 "hello"。fmt.Fprintf(w, "hello\n")
}// 定义了一个名为 headers 的处理函数,功能是输出请求的所有 HTTP 头:
func headers(w http.ResponseWriter, req *http.Request) {//使用 req.Header 获取请求头的键值对。for name, headers := range req.Header {//遍历每个头的名称和对应的值,并将其写入响应中。for _, h := range headers {fmt.Fprintf(w, "%v: %v\n", name, h)}}
}func main() {//在 main 函数中,使用 http.HandleFunc 注册了两个路由:///hello 路由会调用 hello 函数。///headers 路由会调用 headers 函数。http.HandleFunc("/hello", hello)http.HandleFunc("/headers", headers)//启动 HTTP 服务器,监听在端口 8090。nil 表示使用默认的多路复用器。http.ListenAndServe(":8090", nil)
}

路由和多路复用

mux := http.NewServeMux()
mux.HandleFunc("/hello", helloHandler)
mux.HandleFunc("/goodbye", goodbyeHandler)
http.ListenAndServe(":8080", mux)

中间件

func loggingMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {fmt.Println("Request received:", r.Method, r.URL)next.ServeHTTP(w, r)})
}

JSON处理

package mainimport ("encoding/json""net/http"
)type Message struct {Text string `json:"text"`
}func jsonHandler(w http.ResponseWriter, r *http.Request) {msg := Message{Text: "Hello, JSON!"}w.Header().Set("Content-Type", "application/json")json.NewEncoder(w).Encode(msg)
}

🔍理解

  • 使用 http.ListenAndServe 启动服务器。
  • 使用 http.Get、http.Post 等函数可以轻松发送 HTTP 请求。
  • http.Request 对象包含了请求的信息,例如请求方法、URL、头信息等。
  • http.ResponseWriter 用于构建和发送 HTTP 响应。

💪无人扶我青云志,我自踏雪至山巅。
https://i-blog.csdnimg.cn/direct/153ca3933b1a42a7ae3d7bbc267efde1.jpeg#pic_center" alt="在这里插入图片描述" />


http://www.ppmy.cn/devtools/133903.html

相关文章

植物大战僵尸杂交版v2.6.1最新版本(附下载链接)

B站游戏作者潜艇伟伟迷于11月3日更新了植物大战僵尸杂交版2.6.1版本&#xff01;&#xff01;&#xff01;&#xff0c;有b站账户的记得要给作者三连关注一下呀&#xff01; 不多废话下载链接放上&#xff1a; 夸克网盘链接&#xff1a;https://pan.quark.cn/s/279e7ed9f878 新…

WebSocket和HTTP协议的性能比较与选择

WebSocket和HTTP协议的性能比较与选择 引言&#xff1a; 在web应用开发中&#xff0c;无论是实时聊天应用、多人在线游戏还是实时数据传输&#xff0c;网络连接的稳定性和传输效率都是关键要素之一。目前&#xff0c;WebSocket和HTTP是两种常用的网络传输协议&#xff0c;它们…

使用HTML、CSS和JavaScript创建动态圣诞树

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

(免费领源码)java#SSM#mysql高校就业数据可视化管理系统的设计与实现81461-计算机毕设 原创

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对高校就业管理等问题&#xff0c;对高校就业…

2019年下半年试题二:论软件系统架构评估及其应用

论文库链接&#xff1a;系统架构设计师论文 论文题目 对于软件系统&#xff0c;尤其是大规模复杂软件系统而言&#xff0c;软件系统架构对于确保最终系统的质量具有十分重要的意义。在系统架构设计结束后&#xff0c;为保证架构设计的合理性、完整性和针对性&#xff0c;保证系…

探索光耦:达林顿光耦与晶体管光耦的区别

在现代电子技术中&#xff0c;光耦是一种广泛应用的电子元件&#xff0c;它通过光信号实现电气隔离&#xff0c;保证信号传输的安全性和完整性。光耦合器的种类繁多&#xff0c;本文将重点探讨两种常见类型&#xff1a;达林顿光耦和晶体管光耦的区别。 结构的差异 晶体管光耦…

前端开发设计模式——责任链模式

一、定义和特点 1. 定义 责任链模式是一种行为设计模式&#xff0c;它允许多个对象依次处理同一个请求。每个对象都有机会处理请求&#xff0c;如果一个对象不能处理请求&#xff0c;它会将请求传递给下一个对象&#xff0c;直到有一个对象能够处理请求或者请求到达链的末尾 …

IntelliJ IDEA插件开发-代码补全插件入门开发

使用IntelliJ IDEA想必大家都有使用过代码自动补全功能&#xff0c;如输入ab&#xff0c;会自动触发补全&#xff0c;提供相应的补全建议列表。作为有追求的程序员&#xff0c;有没有想过这样的功能是如何实现的&#xff1f;本节将详细介绍如何实现一个类似的代码自动补全插件。…