Hertz入门 | 青训营笔记

399 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

这时就可以在目录下看见我们框架生成的基本代码了。

image.png

编写业务逻辑

echo_service.go中,可以看到我们的原始生成的代码框架。

image.png

我们只需要在里面加入自己的业务逻辑即可。

image.png

最终编译运行

go build
./hertz-echo

直接通过浏览器访问测试

image.png

运行成功!使用果然非常简单!