说是Day3,但是我已经拖更好多天了。因为最近参加了挑战杯AI智能赛,和组员一起写了一个基于联邦学习的隐私计算平台,然后前两天想重新拾回go后端,因为我好久前只用过一两次Java SpringBoot,所以通过极客兔兔的Go 语言简明教程和Go Gin 简明教程(路由,HTML模板,中间件)
快速回顾和学习了一下go gin,还是有收获满满滴。
然后我的计划有变,因为最近有很多比赛(软件杯、信息安全竞赛等),我打算先尽快加紧后端的学习,迟一点再进行算法备战(还有一个百度之星在6月29捏)。
这几天我打算参考极客兔兔的geektutu.com/post/gee.ht… 来用Go实现一个简单的 Web 框架。
day1-base1
首先,我们搭建Gee框架的雏形,代码约50行。
第一行代码我就不会了啊http.HandleFunc("/", indexHandler)而且我看到了很像的一个东西http.HandlerFunc
http.HandleFunc 和 http.HandlerFunc 的区别
| 对比维度 | http.HandleFunc | http.HandlerFunc |
|---|---|---|
| 类型 | 函数(属于 http 包的工具函数) | 接口(Handler 接口的适配器类型) |
| 本质 | 用于注册路由和处理函数的绑定逻辑 | 是一个函数类型(实现了 http.Handler 接口) |
| 功能 | 将普通函数转换为 Handler 接口并注册到路由中 | 定义处理函数的签名规范,用于包装普通函数 |
| 核心作用 | 简化路由注册流程,避免手动创建 Handler 实例 | 让普通函数符合 Handler 接口的要求 |
但是我感觉还是`http.HandleFunc`比较常见,而且比较关键的是的他本质——他是用来将注册路由和处理函数的绑定的。
这个程序创建了一个监听 1103 端口的 HTTP 服务器,能够返回请求路径或请求头信息,用于测试和演示 HTTP 请求处理。
下面是这个base1的main函数 ```go func main() { http.HandleFunc("/", indexHandler) // HandleFunc 用于注册路由和处理函数的绑定关系。 http.HandleFunc("/hello", helloHandler) log.Fatalf(http.ListenAndServe(":1103", nil)) } ``` 函数indexHandler:**将客户端请求的 URL 路径(如 `/`)作为响应内容返回给客户端**。 ```go func indexHandler(w http.ResponseWriter, req *http.Request) { // w http.ResponseWriter 是用于向客户端发送 HTTP 响应的接口 // req *http.Request:客户端发送的 HTTP 请求对象,包含请求行、头部、Body 等信息 fmt.Fprintf(w, "URL.PATH = %q\n", req.URL.Path) } ``` 函数helloHandler:**将客户端发送的 HTTP 请求中的所有头部信息(Headers)以键值对的形式返回给客户端。** ```go func helloHandler(w http.ResponseWriter, req *http.Request) { for k, v := range req.Header { fmt.Fprintf(w, "Header[%q] = %q\n", k, v) } } ```