包含标签 golang 的文章

Golang Interface

结论 interface 本质上也是一种类型,所以在判断它是否为 nil 时, 如果是其它类型转成的 interface,其实中间已经包含了结构体信息,所以这时它已经不是 nil 了 背景 此文是由一个 bug 引发的思考,代码如下 业务代码 代码经过精简,请暂时忽略注释的的内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28……

阅读全文

gin 源码探究

官方的 http 包 我们从流量打入端口开始,gin 其实是官方 http 包的封装 1 2 3 4 5 6 7 8 9 // 这里是 gin.Run 的逻辑 func (engine *Engine) Run(addr ...string) (err error) { defer func() { debugPrintError(err) }() address := resolveAddress(addr) debugPrint("Listening and serving HTTP on %s\n", address) err = http.ListenAndServe(address, engine) return } 再回顾下官方 http 包的使用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func run() { // 点进去就发现,它使用 DefaultServeMux 注册了路由地址 http.HandleFunc("/hello", HelloServer) // 这里……

阅读全文