[ go语言学习day5 | 青训营笔记]

103 阅读2分钟

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

三件套介绍

Gorm

Gorm是一个已经迭代了10年+的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源拓展。

Kitex

Kitex是字节内部的Golang微服务RPC框架,具有高性能、强可拓展的主要特点。支持多协议并且拥有丰富的开源拓展

Hertz

Hertz是字节内部的HTTP框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性,高性能,高拓展性特点

GORM生态

GORM代码生成工具 GORM分片库方案 GORM手动索引 GORM乐观锁 GORM读写分离 GORM OpenTelemetry拓展

使用IDL定义服务与接口

如果我们要进行RPC就需要知道对方的接口是什么,需要传入什么参数,同时也需要知道返回值是什么样的。这时候就需要通过IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。

Kitex生态

XDS拓展
opentelemetry
ETCD服务注册与发现拓展
Nacos服务注册与发现拓展
Zookeeper服务注册与发现拓展
polaris拓展
丰富的示例代码与业务demo

Gorm的约定

  gorm使用名为ID的字段作为主键
  使用结构体的蛇形负数作为表名
  字段名的蛇形作为列名
  使用createdAt,UpdatedAt字段作为创建、更新时间

First的使用踩坑

使用First时,需要注意查询不到数据会返回ErrRecordNotFound。使用Find查询多条数据,查询不到数据不会返回错误。

使用结构体作为查询条件

  当使用结构体作为条件查询时,GORM只会查询非零值字段。这意味着如果您的字段值为0false或其他零值,该字段不会被用于构建查询条件,使用Map来构建查询条件