7days-golang/gee-web/day01 标准库启动Web服务-学习笔记

代码编写

  1. 准备
    创建项目文件夹go-http-demo
    在 go-http-demo 文件夹内创建一个名为 main.go 的文件
  2. 声明包名
    在 main.go 文件的第一行写上:
package main

说明这个文件属于 main 包,表示这是一个可执行程序的入口。

  1. 导入必要的包
import (
	"fmt"      // 用于格式化输出信息
	"log"      // 用于打印错误信息
	"net/http" // 包含了构建 HTTP 服务所需要的工具。
)
  1. 编写main函数
// 在其中注册路由并启动HTTP服务
func main() {
	// 注册路由”/“,用户请求根路径时调用indexHandler处理
	http.HandleFunc("/", indexHandler)

	// 注册路由 "/hello",当用户请求 /hello 时调用 helloHandler 处理
	http.HandleFunc("/hello", helloHandler)

	// 启动HTTP服务,在本机的 9999 端口上监听
	// 如果服务启动出错,log.Fatal会打印错误信息并终止程序
	log.Fatal(http.ListenAndServe(":9999", nil)) // 传入 nil 表示使用默认的请求多路分发器
}

路由注册:http.HandleFunc 将 URL 路径与对应的处理函数绑定。当请求到达时,会自动调用相应的处理函数。
传入 nil 表示使用 Go 标准库默认的路由分发器(也就是说,Go 内部会根据前面注册的路由自动查找对应的处理函数)
使用 log.Fatal 包装 ListenAndServe,如果启动服务出错(例如端口被占用),会输出错误信息并退出程序。

  1. 实现处理函数 indexHandler 和 helloHandler
// w http.ResponseWriter 用来构造和发送响应
// r *http.Request 包含了客户端请求的所有信息(例如 URL、Header、Body 等)
func indexHandler(w http.ResponseWriter, r *http.Request) {
	// 当请求”/“时,向客户端输出请求的URL.Path信息
	fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path)
}
// 当请求 "/hello" 时执行,输出请求头信息
func helloHandler(w http.ResponseWriter, r *http.Request) {
	// 遍历请求头中的每个键值对
	for k, v := range r.Header {
		fmt.Fprintf(w, "Header[%q] = %q\n", k, v)
	}

运行与测试

总结

  1. 这部分内容展示了如何使用 Go 标准库来启动一个 HTTP 服务。Go 内置的 net/http 库提供了 HTTP 网络编程的基本接口。这一标准库来构建 Web 服务,这样就不用从零实现 TCP 连接和 HTTP 协议细节,可以直接关注于业务逻辑的实现。
  2. 通过使用 http.HandleFunc 注册路由,初步展示了“路由映射”这一概念。在后续构建自己的 Web 框架时,正是基于这一点——将路由和处理函数解耦,构建一个灵活的路由映射表。
  3. Go 的 http.Handler 接口非常简单(只需要实现 ServeHTTP 方法),这为后续自定义框架提供了良好的扩展点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值