这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天。 本篇笔记记录我入门使用Hertz的一些过程。
安装
首先是安装,Hertz的安装比较简单,直接在go mod里面引入就可以了,但是我还想使用Hertz的代码生成工具,因此还要安装Hz工具。
go install github.com/cloudwego/hertz/cmd/hz@latest
同时,我准备使用protobuf格式的IDL,因此还要安装protobuf。
// 下载 protoBuf:
$ git clone https://github.com/protocolbuffers/protobuf.git
// 安装依赖库
$ sudo apt-get install autoconf automake libtool curl make g++ unzip libffi-dev -y
// 进入目录
$ cd protobuf/
// 自动生成configure配置文件:
$ ./autogen.sh
// 配置环境:
$ ./configure
// 编译源代码(要有耐心!):
$ make
// 安装
$ sudo make install
// 刷新共享库 (很重要的一步啊)
$ sudo ldconfig
// 成功后需要使用命令测试
$ protoc -h
项目初始化
// 使用he工具生成基础代码
hz new -mod hertz-echo
// 下载代码包
go mod tidy
// 编译并测试
go build
./hertz-demo
curl 127.0.0.1:8888/ping
创建proto格式的IDL文件
首先需要创建一个api.proto文件,并在其他的proto文件中引用它。
// idl/api.proto; 注解拓展
syntax = "proto2";
package api;
import "google/protobuf/descriptor.proto";
option go_package = "/api";
extend google.protobuf.FieldOptions {
optional string raw_body = 50101;
optional string query = 50102;
optional string header = 50103;
optional string cookie = 50104;
optional string body = 50105;
optional string path = 50106;
optional string vd = 50107;
optional string form = 50108;
optional string go_tag = 51001;
optional string js_conv = 50109;
}
extend google.protobuf.MethodOptions {
optional string get = 50201;
optional string post = 50202;
optional string put = 50203;
optional string delete = 50204;
optional string patch = 50205;
optional string options = 50206;
optional string head = 50207;
optional string any = 50208;
optional string gen_path = 50301;
optional string api_version = 50302;
optional string tag = 50303;
optional string name = 50304;
optional string api_level = 50305;
optional string serializer = 50306;
optional string param = 50307;
optional string baseurl = 50308;
}
extend google.protobuf.EnumValueOptions {
optional int32 http_code = 50401;
}
接下来创建实际的接口定义proto文件
// idl/echo/echo.proto
syntax = "proto3";
package echo;
option go_package = "echo";
import "api.proto";
message EchoReq {
string Name = 1[(api.query)="name"];
}
message EchoResp {
string RespBody = 1;
string YourIp = 2;
}
service EchoService {
rpc Echo(EchoReq) returns(EchoResp) {
option (api.get) = "/echo";
}
}
生成框架代码
hz update -I idl -idl idl/echo/echo.proto
这时就可以在目录下看见我们框架生成的基本代码了。
编写业务逻辑
在echo_service.go中,可以看到我们的原始生成的代码框架。
我们只需要在里面加入自己的业务逻辑即可。
最终编译运行
go build
./hertz-echo
直接通过浏览器访问测试
运行成功!使用果然非常简单!