go原生http服务
在go中写一个web服务非常发方便快速
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
type Response struct {
Code int `json:"code"`
Data any `json:"data"`
Msg string `json:"msg"`
}
func GET(res http.ResponseWriter, req *http.Request) {
// 获取参数
fmt.Println(req.URL.String())
byteData, _ := json.Marshal(Response{
Code: 0,
Data: map[string]any{},
Msg: "成功",
})
res.Write(byteData)
}
func POST(res http.ResponseWriter, req *http.Request) {
// 获取参数
byteData, _ := io.ReadAll(req.Body)
fmt.Println(string(byteData))
byteData, _ = json.Marshal(Response{
Code: 0,
Data: map[string]any{},
Msg: "成功",
})
res.Write(byteData)
}
func main() {
http.HandleFunc("/get", GET)
http.HandleFunc("/post", POST)
fmt.Println("http server running: http://127.0.0.1:8080")
http.ListenAndServe(":8080", nil)
}
但是在实际项目中使用原生go http库那会非常不方便。
主要体现在
- 参数解析与验证
- 路由不太明了
- 响应处理比较原始
gin框架
首先是安装第三方库
go get github.com/gin-gonic/gin
然后写gin程序都有一套固定的格式
- 初始化
- 写路由
- 监听运行
hello world
例如写一个helloworld
package main
import "github.com/gin-gonic/gin"
func main() {
// 1 初始化
r := gin.Default()
// 2 路由
r.GET("/", func(c *gin.Context) {
c.String(200, "hello world")
})
// 3 监听运行
r.Run(":8080")
}
知识扩展
- 内网运行
如何让你的程序,能让内网中的其他小伙伴访问呢?
r.Run(":8080") // 等价于 r.Run("0.0.0.0:8080")
- 关闭debug输出
不想看到gin默认的那些debug输出,怎么办呢?
设置运行模式即可,默认是debug
gin.SetMode("release")