go框架三件套详解 | 青训营笔记

23 阅读2分钟

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

概述

Gorm 是功能强大的ORM框架, 被字节广泛使用, 拥有非常丰富的开源扩展

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

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

基础使用

Gorm

ORM(Object Relational Mapping)对象关系映射,其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。

package main

import (
  "gorm.io/gorm"
  "gorm.io/driver/sqlite"
)

type Product struct {
  gorm.Model
  Code  string
  Price uint
}

func main() {
  db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
  if err != nil {
    panic("failed to connect database")
  }



  // Create
  db.Create(&Product{Code: "D42", Price: 100})

  // Read
  var product Product
  db.First(&product, 1) // 根据整型主键查找
  db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录

  // Update - 将 product 的 price 更新为 200
  db.Model(&product).Update("Price", 200)
  // Update - 更新多个字段
  db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
  db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

  // Delete - 删除 product
  db.Delete(&product, 1)
}

DSN是数据源名称Data Source Name,是应用程序用来请求与ODBC数据源连接的名称。连接到ODBC时,它会存储连接详细信息,例如数据库名称、目录、数据库驱动程序、UserID、password等。

约定 (默认)

Gorm使用名为ID的字段作为主键

当没有定义TableName方法时, Gorm使用结构体的蛇形复数作为表面

使用CreatedAt, UpdatedAt字段作为创建, 更新时间

数据库

Gorm通过驱动来连接数据库

支持MySQL, SQLServer, PostgreSQL, SQLite

Kitex

RPC框架(RPC: Remote Produce Call)

RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议

Kitex对Windows支持不完善, 建议使用虚拟机或WSL2

Hertz

Hertx: go的http框架 Hertz提供了代码生成工具Hz, 通过定义IDL(interface description language)文件即可生成对应的基础服务代码

IDL是用来描述软件组件接口的一种计算机语言。 IDL通过一种中立的方式来描述 接口 ,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流

默认使用的网络库的Netpoll, 性能优于标准库 (当使用TLS时, netpoll不支持, 配置使用标准库) Json编解码使用Sonic 使用sync.Pool复用对象, 协议层数据解析优化