GORM、Kitex、Hertz初步使用记录 | 青训营笔记

325 阅读3分钟

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

GORM使用

GORM的使用目前就是学会使用常规的增删改查功能。

前置:连接与创建表格

开始连接数据库

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

dsn := "username:password@tcp(localhost:port)/database?charset=utf8"
db, err := gorm.Open(mysql.Open(dsn), &gorm.config{})
if err != nil : "failed to connect database" *

下面我将逐行拆解上面这块代码段。

  1. dsn:就是一个数据库的连接地址。usernamepassword是自己设置的,填写自己设置的内容。一般的username都是root,tcp就是协议名称,暂时不用管。localhost一般填写127.0.0.1,port可以看自己心情填写,一般都是8080,database就是自己创建的数据库的名称,后面是对字符集的设置。

    例如,我现在有一个数据库名为sqltest,我的mysql用户名是root,密码是1234,在这里我就应该填写:

    root:1234@tcp(127.0.0.1:8080)/sqltest?charset=utf8

  2. 首先是mysql.Open,然后是gorm.Open。第二个参数是gorm的设置,在实际项目中不会是这样简单的传入。

创建一条/多条记录

不熟悉数据库相关名词概念的同学可以点击这篇博客:SQL极速入门 | 快速掌握SQL语句&入门Mysql

首先定义好数据类型:

type struct product{
    Code string
    price int8 `gorm:"default:18"`
}

在price的类型后面又有一些字段,那些的意思是:在数据库中入库时候,如果没有传入参数,默认为18。

这种数据库Create的备注方式为:gorm:"...",里面的...就是要输入的内容。

然后开始创建一条/多条记录:

image.png

这里需要注意:

  1. db.Create()就是向数据库中添加一条记录。对应的SQL语句为:

    INSERT INTO [table name] VALUES(...)

  2. 传入的都是对象的引用,也就是他的地址。这是因为在函数传参的过程中,传入的都是实例对象的拷贝。 也就是说是先拷贝一份,再把拷贝的传进去,而不是直接传入实际对象。所以通过传引用的方式可以很好的避免后续函数内部无法修改值的问题。(修改到会被回收的动态内存去了)

  3. 在实际工程中,我们通常使用的方式是在赋值的时候就取好引用,而不是在传参的时候再取引用。

GORM查询

image.png

我们可以简单分析一下查询的思路:

users := make([]*User, 0)
result := db.Where("age > 10").Find(&users)

首先分配一个内存空间给存储查询结果的切片:[]*User

db.Where()表示提供限制条件,后面接Find()方法,将查询到的数据存储在users中。

GORM更新数据

image.png

GORM事务

基本操作

image.png

Trancation方法-自动提交事务

避免漏写Commit、Rollback

image.png

Kitex框架

什么是RPC

RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。

什么是微服务

微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。

简单来说,就是将一个系统按业务划分成多个子系统,每个子系统都是完整的,可独立运行的,子系统间的交互可通过HTTP协议进行通信。

Hertz使用

Hertz 是字节跳动服务框架团队研发的超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点。

image.png

更多Hertz框架信息请看这篇文章:Hertz介绍