三件套初探 | 青训营笔记

82 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

如何安装Docker

使用官方提供的Docker一键安装脚本

curl -fsSL get.docker.com -o get-docker.sh
chmod +x get-docker.sh
sudo  sh get-docker.sh 
docker -version

如何安装Postman

进入官网下载安装

Postman

如何安装Git

git官网

Git (git-scm.com)

体验Hertz

通过快速开始 | CloudWeGo生成一个简单的Hertz项目

// Code generated by hertz generator.package numService
​
import (
   "context"
   "fmt"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
​
   "github.com/cloudwego/hertz/pkg/app"
   "github.com/cloudwego/hertz/pkg/protocol/consts"
   numService "hertz/demo/biz/model/numService"
)
​
type test struct {
   Num  int64
   Msg  string
   Data []*numService.Post
}
​
// PostsMethod .
// @router /num [GET]
func PostsMethod(ctx context.Context, c *app.RequestContext) {
   var err error
   var req numService.NumServiceReq
   err = c.BindAndValidate(&req)
   if err != nil {
      c.String(consts.StatusBadRequest, err.Error())
      return
   }
​
   //放入数据库
   //链接数据库
   dsn := ""
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
​
   //var results []map[string]interface{}
   var result []*numService.Post
   db.Table("posts").Where("parent_id = ?", req.ParentID).Find(&result)
​
   fmt.Printf("%#v", result)
​
   resp := new(numService.NumServiceResp)
   resp.Msg = "ok"
   resp.Num = int64(len(result))
   resp.Data = result
   resp1 := test{}
   resp1.Data = result
   c.JSON(consts.StatusOK, resp1)
}

写一个简单的业务逻辑,测试并获取到正确的返回值

通过写IDL使用hz自动生成代码

namespace go post
​
struct PostsReq {
    1: string context (api.query="context");
    2: i64 parent_id (api.query="parent_id") 
}
​
struct PostsResp {
    1: i64 code;
    2: string msg;
}
​
​
service PostsService {
    PostsResp PostsMethod(1: PostsReq request) (api.post="/posts");
}

使用hz new -idl idl/hello.thrift创建新项目

在handler中添加自己的业务逻辑

使用hz update -idl idl/hello.thrift可以更新自己的项目

IDL是什么

IDL是Interface description language的缩写,指接口描述语言,是CORBA规范的一部分,是跨平台开发的基础。

基本数据类型

(1)基本数据类型:OMG IDL基本数据类型包括short、long和相应的无符号(unsigned)类型,表示的字长分别为16、32位。

(2)浮点数类型:OMG IDL浮点数类型包括float、double和long double类型。其中float表示单精度浮点数,double表示双精度浮点数,long double表示扩展的双精度浮点数。

(3)字符和超大字符类型:OMG IDL定义字符类型char为面向字节的码集中编码的单字节字符; 定义类型wchar为从任意字符集中编码的超大字符。

(4)逻辑类型:用boolean关键字定义的一个变量,取值只有true和false。

(5)八进制类型:用octet关键字定义,在网络传输过程中不进行高低位转换的位元序列。

(6)any数据类型:引入该类型用于表示OMG IDL中任意数据类型。