这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
前言
GoHTTPHertz
Hertzhttp
基础使用
安装Hertz
HertzGoGo>=1.15
Hertz
go install github.com/cloudwego/hertz/cmd/hz@latest
安装后进行验证,输入以下命令:
hz -v
如果能正确输出版本信息,如下,就说明已经安装好了。
hz version v0.5.2
生成示例代码
hz
hertzhz newhz new -module examplego mod tidy
生成代码目录如下:
main.go
Server
go run main.go
运行命令,成功启动后,输出以下信息:
8888
http://127.0.0.1:8888/ping
json
{"message":"pong"}
Hertz路由
Hertz
静态路由
HertzGETPOSTPUTDELETEANY
路由组
Hertz
参数路由
Hertz:name
/hertz/:version
| 路径 | 是否匹配 |
|---|---|
| /hertz/v1 | 匹配 |
| /hertz/v2 | 匹配 |
| /hertz/v1/detail | 不匹配 |
| /hertz/ | 不匹配 |
RequestContext.Param
h.GET("/hertz/:version", func(ctx context.Context, c *app.RequestContext) {
version := c.Param("version")
c.String(consts.StatusOK, "Hello %s", version)
})
通配路由
Hertz*path
/hertz/*path
| 路径 | 是否匹配 |
|---|---|
| /hertz/v1 | 匹配 |
| /hertz/v1/detail | 匹配 |
| /hertz/ | 匹配 |
RequestContext.Param
h.GET("/hertz/:version/*action", func(ctx context.Context, c *app.RequestContext) {
version := c.Param("version")
action := c.Param("action")
message := version + " is " + action
c.String(consts.StatusOK, message)
})
参数绑定
HertzBindValidateBindAndValidate
httpHertztag
urlhertz:param*parambodyqueryheaderjson
BindAndValidate
Hertz Client
HertzHttp ClientHttp
GETHttp
func Get() {
c, err := client.NewClient()
if err != nil {
return
}
status, body, _ := c.Get(context.Background(), nil, "http://www.example.com")
fmt.Printf("status=%v body=%v\n", status, string(body))
}
POSTHttp
func Post() {
c, err := client.NewClient()
if err != nil {
return
}
var postArgs protocol.Args
postArgs.Set("arg", "a") // 发送参数
status, body, _ := c.Post(context.Background(), nil, "http://www.example.com", &postArgs)
fmt.Printf("status=%v body=%v\n", status, string(body))
}
代码生成
HertzHzhzHertzhzthriftprotobufIDLHertz
IDLhello.thrift
namespace go hello.example
struct HelloReq {
// 添加 api 注解为方便进行参数绑定
1: string Name (api.query="name");
}
struct HelloResp {
1: string RespBody;
}
service HelloService {
HelloResp HelloMethod(1: HelloReq request) (api.get="/hello");
}
执行命令生成代码,并整理依赖:
hz new -idl hello.thrift
go mod tidy
生成的文件结构如下:
Hertz性能
HertzWeb
NetpollJsonSonicSonicJsonsync.Pool
Hertz生态
Hertz
Http2opentelemetryJWTWebsocket
引用
字节内部视频——Go框架三件套详解(Web/RPC/ORM)