Go框架进一步学习 | 青训营笔记

61 阅读4分钟

Go框架进一步学习

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

Gorm

Gorm是一个在Go语言中使用的对象关系映射(ORM)框架。它允许开发人员在Go中使用面向对象的方式与数据库交互,而不需要编写复杂的SQL语句。Gorm支持多种数据库,包括MySQL,PostgreSQL,SQLite等。

基本用法:

  1. 安装Gorm:使用Go的包管理工具,如"go get -u github.com/jinzhu/gorm"

  2. 导入包:在需要使用Gorm的文件中导入 "github.com/jinzhu/gorm"

  3. 初始化数据库连接:使用gorm.Open()函数连接数据库,并将连接赋值给一个变量

  4. 定义数据结构体:定义一个结构体来映射数据库表中的字段

  5. 数据操作:使用Gorm提供的API完成对数据库的增删改查操作。

    例如:

    package main
    
    import (
        "fmt"
        "github.com/jinzhu/gorm"
        _ "github.com/jinzhu/gorm/dialects/mysql"
    )
    
    type User struct {
        ID   int
        Name string
    }
    
    func main() {
        db, err := gorm.Open("mysql", "root:password@tcp(localhost:3306)/dbname?charset=utf8&parseTime=True&loc=Local")
        if err != nil {
            fmt.Println(err)
            return
        }
        defer db.Close()
    
        db.AutoMigrate(&User{})
    
        db.Create(&User{Name: "John"})
    
        var user User
        db.First(&user, 1)
        fmt.Println(user)
    }
    
    

    这是一个简单的例子,在这个例子中,我们连接了本地的 MySQL 数据库,然后使用Gorm的AutoMigrate函数创建了一个名为"users"的表,并在表中创建了两个字段:"ID"和"Name"。

    然后我们使用了Gorm的Create函数将一个新的用户数据插入到表中,并使用First函数查询表中第一条记录。

    除了上面提到的几个函数,Gorm还提供了很多其它的数据库操作函数,如Find、Where、Update、Delete等,可以根据需要选择使用。

    此外,Gorm还支持高级功能,如关联关系、预加载、事务等,可以满足复杂的数据库操作需求。

    例如:

    1. 关联关系:Gorm支持一对一、一对多、多对多等多种关联关系。在定义结构体时,可以使用gorm的相关标签来定义关联关系,如gorm:"ForeignKey:UserRefer"
    2. 预加载:Gorm支持预加载,可以在查询数据时预先加载关联关系的数据,避免N + 1查询问题。
    3. 事务:Gorm支持事务,可以通过db.Begin()开始一个事务,通过db.Commit()提交事务,通过db.Rollback()回滚事务。
    4. 日志: Gorm支持日志记录,可以通过db.LogMode(true)开启日志记录,记录数据库操作的SQL语句。
    5. 钩子: Gorm支持钩子函数,可以在数据操作前后执行自定义的函数,用于扩展数据操作的功能。

Kitex

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

它提供了简单易用的API来构建和管理微服务。Kitex提供了微服务的基本组件,如服务发现、负载均衡、服务配置等,并且支持与其它微服务框架,如Kubernetes, Consul等集成。

基本用法:

  1. 安装Kitex: 使用Go的包管理工具,如"go get -u github.com/go-kitex/kitex"

  2. 导入包:在需要使用Kitex的文件中导入"github.com/go-kitex/kitex"

  3. 初始化Kitex:使用kitex.NewKitex()函数初始化Kitex,并将其赋值给一个变量

  4. 注册服务:使用Kitex的Register函数注册服务,并使用Handle函数处理请求

  5. 启动服务:使用Kitex的Run函数启动服务

    例如:

    package main
    
    import (
        "github.com/go-kitex/kitex"
        "github.com/go-kitex/kitex-examples/hello"
    )
    
    func main() {
        k := kitex.NewKitex()
        k.Register(hello.HelloService{})
        k.Run()
    }
    
    

    这是一个简单的例子,在这个例子中,我们创建了一个Kitex实例,并使用Register函数注册了一个名为HelloService的服务,然后使用Run函数启动服务。

    Kitex的用法非常简单易懂,可以帮助开发者快速构建和管理微服务。

    它也有一些拓展用法,例如:

    1. 服务配置: Kitex支持从文件或环境变量加载配置,可以通过 kitex.SetConfigFile()kitex.SetEnvPrefix() 来设置配置。
    2. 服务发现: Kitex支持使用Consul或Zookeeper作为服务发现机制,可以通过kitex.UseConsul()kitex.UseZookeeper() 来设置。
    3. 熔断器: Kitex支持使用Hystrix作为熔断器,可以通过 kitex.UseHystrix() 来设置
    4. 服务熔断: Kitex支持熔断机制,可以通过 kitex.CircuitBreaker() 函数来设置
    5. 负载均衡: Kitex支持多种负载均衡策略,可以通过 kitex.SetBalancer() 来设置
    6. 数据压缩: Kitex支持数据压缩,可以通过 kitex.UseCompress() 来设置
    7. 日志: Kitex支持自定义日志处理,可以通过 kitex.SetLogger() 来设置