学习笔记: Go 框架三件套详解(Web/RPC/ORM) | 青训营

75 阅读4分钟

介绍

  1. GORM: GORM(Go Object-Relational Mapping)是一个流行的Go语言ORM(对象关系映射)库。ORM是一种编程模式,用于在应用程序代码和数据库之间建立对象和关系之间的映射,使得开发人员可以通过操作对象来操作数据库,而不必直接编写SQL查询语句。GORM提供了许多便捷的方法来处理数据库操作,例如创建、读取、更新和删除记录。它支持多种数据库,如MySQL、PostgreSQL、SQLite等,而且可以用于各种应用程序,从简单的Web应用到大型服务。
  2. Kitex: Kitex是一个用于构建高性能RPC(远程过程调用)和微服务的Go语言框架。它专注于提供高度可定制的服务,旨在支持大规模、高性能和低延迟的微服务体系结构。Kitex具有低开销的序列化和反序列化机制,同时提供了高效的连接池管理和资源复用,以减少不必要的开销。它还支持多种传输协议和中间件,可以轻松地集成到现有的系统中。Kitex的目标是帮助开发人员构建高性能和可扩展的微服务应用程序。
  3. Hertz:HERTZ是一款采用Go语言开发的高性能Web框架,接口简单,非常易于学习和使用,可以显著提升Web应用的开发效率。HERTZ内置了便捷的路由机制,开发者可以快速定义请求路由及处理函数。同时,HERTZ还提供了灵活的中间件支持,使得开发者可以方便地实现日志、验证、Tracing等功能。借助HERTZ的高性能运行时,开发者可以轻松构建支持高并发、低延迟的Web服务。HERTZ还支持热重载、跨平台等特性,在保障性能的同时提升开发体验。因此,HERTZ是使用Go语言进行Web应用开发的优秀选择。

三件套的使用

GORM使用

GORM(Go Object-Relational Mapping)是一个在Go语言中操作数据库的ORM库,它可以让你通过Go语言的结构体来进行数据库的增删改查操作,而不必直接编写SQL语句。以下是一个简单的示例,展示了如何使用GORM进行基本的数据库操作。

安装 GORM: 首先,你需要安装 GORM。在命令行中执行以下命令:

go get -u gorm.io/gorm

连接数据库: 在开始使用GORM之前,你需要连接到数据库。以下示例演示了如何连接到SQLite数据库:

package main

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

func main() {
	// 连接到SQLite数据库
	db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	if err != nil {
		panic("Failed to connect to database")
	}
	
	// 在实际应用中,你应该在适当的时机关闭数据库连接
	// defer db.Close()
}

定义模型: 接下来,你需要定义与数据库表对应的Go结构体,这些结构体被称为“模型”。

package main

import (
	"gorm.io/gorm"
)

type User struct {
	gorm.Model
	Name  string
	Email string
}

在上面的示例中,User结构体继承了gorm.Model,这将自动为模型添加ID、CreatedAt、UpdatedAt和DeletedAt字段。

创建记录: 使用GORM,你可以轻松地创建新的记录。

func main() {
	// ... 连接数据库代码 ...

	// 创建记录
	user := User{Name: "John Doe", Email: "john@example.com"}
	result := db.Create(&user)
	if result.Error != nil {
		panic("Failed to create user")
	}
}

查询记录: 你可以使用GORM执行各种查询操作。

func main() {
	// ... 连接数据库代码 ...

	// 查询单个记录
	var user User
	result := db.First(&user, 1) // 查询ID为1的用户
	if result.Error != nil {
		panic("User not found")
	}

	// 查询多个记录
	var users []User
	result = db.Find(&users)
	if result.Error != nil {
		panic("Failed to fetch users")
	}
}

更新记录: 你可以使用GORM更新现有记录。

func main() {
	// ... 连接数据库代码 ...

	// 更新记录
	var user User
	result := db.First(&user, 1)
	if result.Error != nil {
		panic("User not found")
	}

	user.Email = "newemail@example.com"
	db.Save(&user)
}

删除记录: 使用GORM,你可以删除记录。

func main() {
	// ... 连接数据库代码 ...

	// 删除记录
	var user User
	result := db.First(&user, 1)
	if result.Error != nil {
		panic("User not found")
	}

	db.Delete(&user)
}

这只是GORM的一些基本用法示例。GORM还提供了许多其他功能,如条件查询、关联查询、事务支持等。你可以查阅GORM的官方文档以获取更详细的信息和示例:gorm.io/docs/

KITEX使用

Kitex 目前对 Windows 的支持不完善。如果本地开发环境是 Windows 的同学建议使用虚拟机或 WSL2。

定义IDL接口:

type HelloReq {
  Name string
}

type HelloResp {
  Message string
}

service Hello {
  @handler NewHello
  getHello(HelloReq) returns(HelloResp)
}

实现服务端:

// 实现NewHello handler
func NewHello(ctx context.Context, req *HelloReq) (resp *HelloResp, err error) {
  // 业务实现
  return
}
// 注册服务
svr := hello.MustNewServer(new(HelloImpl)) 
// 启动服务
err := svr.Run()

客户端调用:

// 构建客户端
c, err := hello.NewClient("localhost:8888", client.WithMessageLogger())

// 调用远程服务
req := &HelloReq{Name: "kitex"}  
resp, err := c.GetHello(ctx, req)

HERTZ使用

导入hertz包:

import "github.com/cloudwego/hertz/pkg/app"

创建服务:

h := hertz.New()

定义路由:

h.GET("/hello", func(c context.Context, ctx *app.RequestContext) {
  // 请求处理逻辑
})

添加中间件:

h.Use(LoggingMiddleware)

启动服务:

h.Spin()

客户端请求:

curl http://localhost:8080/hello

hertz通过封装net/http库,提供了路由、中间件、请求上下文等功能,可以快速构建Go web服务。

以上就是通过上课与看课件加上结合一些网上信息总结出来的笔记~