老师同学们好,想请问一下gin相当于封装了原生的net/http,相比原生的net/http有哪些优势,哪些方面给大家带来了方便。谢谢。
http库只是基本的架子,还缺少很多问题。Gin进一步封装,让我们能更快使用——比如,http中的http.Request
.Body只会读一次,第二次是读不到的,然后你使用的话需要自己保存;但是用Gin后,它会帮你做好保存让你直接使用,这样更加符合开发的逻辑。总之,Gin就是弥补了原生http库的不足,并且这些补充都是适用了的最佳实践方式。
```go
func readBodyOnce(w http.ResponseWriter, r *http.Request) {
body, err := io.ReadAll(r.Body)
if err != nil {
fmt.Fprintf(w, "read body failed: %v", err)
// 记住要返回,不然就还会执行后面的代码
return
}
// 类型转换,将 []byte 转换为 string
fmt.Fprintf(w, "read the data: %s \n", string(body))
// 尝试再次读取,啥也读不到,但是也不会报错
body, err = io.ReadAll(r.Body)
if err != nil {
// 不会进来这里
fmt.Fprintf(w, "read the data one more time got error: %v", err)
return
}
fmt.Fprintf(w, "read the data one more time: [%s] and read data length %d \n", string(body), len(body))
}
```
反正快就对了