Go框架三件套初体验|青训营

72 阅读4分钟

Go框架三件套介绍

ORM框架 >  GORM(Go Object-Relational Mapping):

GORM 是一个用于 Go 语言的 ORM(对象关系映射)库,它允许开发者通过 Go 结构体来定义数据库表和关系,并提供了一组 API 来进行数据库操作。GORM 可以用于连接多种数据库(如 MySQL、PostgreSQL、SQLite 等),简化了数据库访问和操作的过程,使开发者可以更轻松地进行数据持久化。解决了 Go 语言与数据库之间的映射关系。

RPC框架 >  Kitex:

Kitex 是一个开源的高性能分布式 RPC 框架,由腾讯开发,用于构建微服务应用。它在性能和功能上都进行了优化,支持多种协议和传输层,具备请求跟踪、限流、负载均衡、服务发现等功能。Kitex 的目标是提供高性能和低延迟的服务调用,适用于构建大规模的分布式系统。解决了分布式微服务架构中的服务调用问题。

HTTP框架 >  Hertz:

Hertz 是一个轻量级的 Go 语言 Web 框架,旨在帮助开发者快速构建 Web 应用。它基于标准库的 net/http 包构建,提供了路由、中间件、请求处理等基础功能。Hertz 的设计理念是简洁和易用,适合小型项目或需要快速原型验证的场景。是一个轻量级 Web 框架,适合构建简单的 Web 应用。

Go框架三件套的使用

GORM的基本使用

type Product struct
{
Code string
Price uint
}

func (p Product) TableName() string {
return "product"
}

func main() {
    db, err := gorm. Open(
        mysql. Open( dsn: "user :pass@tcp(127.0.0.1:3306)/dbname charset=utf8mb4&parseTime=True&loc=Local"),
        &gorm.Config{})
    if err != nil {
        panic(v: "failed to connect database")
        }
    // Create
    db.Create(&Product{Code: "D42", Price: 100})
    // Read
    var product Product
    db.First(&product,conds...: 1)

    db.First(&product,conds..: "code = ?", "D42") //查找code字段值为D42的记录
    // Update - 将product 的price 更新为 200
    db.Model(&product). Update( column: "Price", value: 200)
    // Update - 更新多个字段
    db.Model(&product) .Updates (Product{Price: 200, Code:"F42"}) //仅更新非零值字段
    ab.Model(&product). Upaates (mgp[string]interface{}{"Price":200,"Code": "F42"})
    // Delete - 删除 product
    db.Delete(&product,conds...: 1) 

Kitex的基本使用

package main

import (
    "context"
    "example/kitex_gen/api"
)

// EchoImp1 implements the last service interface defined in the IDL.
type EchoImpl struct{}

// Echo implements the EchoImpl interface.
func (s *EchoImpl) Echo(ctx context. Context, req *api.Request) (resp *api .Response, err error) {
// TODO: Your code here..
return
}

Hertz的基本使用

package main

import (
    "context"
    "github.com/cloudwego/hertz/pkg/app"
    "github.com/cloudwego/hertz/pkg/app/server"
    "github.com/cLoudwego/hertz/pkg/common/utils"
    "github.com/cloudwego/hertz/pkg/protocol/consts"func main() {
    h := server. Default(server.WithHostPorts( hp: "127.0.0.1:8080"))
    h.GET( relativePath: "/ping",func(c context.Context, ctx *app.RequestContext) {
        ctx.JSON(consts.StatusOK, utils.H{"ping":"pong"})
    })
    h.Spin()
}

学习总结

  • GORM框架在数据库操作上提供了更高的抽象层,使得与数据库的交互变得更加直观和简便。通过结构体定义和链式查询,我能够更自然地操作数据库。GORM 的强大查询语法和事务支持为数据处理带来了很大的便利。然而,我也发现在复杂的查询和性能优化方面,需要深入理解其内部机制,以便更好地应对各种情况。
  • 学习 Kitex 让我对构建分布式系统有了更深入的理解。它注重性能和低延迟,以满足大规模微服务应用的需求。通过了解 Kitex 的多协议支持和插件机制,我意识到在分布式通信中需要仔细考虑网络开销和系统拓扑。然而,初始设置和配置可能较为繁琐,需要付出一些学习和调试的成本。
  • Hertz 提供了一个简单、轻量级的 Web 框架,让我能够快速构建小型 Web 应用。通过它,我更专注于业务逻辑,不必被过多的框架细节所干扰。然而,Hertz 的功能相对有限,对于大型复杂应用可能需要额外的定制和扩展。此外,深入学习和掌握其源代码可以帮助更好地理解 Web 框架的工作原理。

总的来说,学习这三个框架让我对 Go 语言在不同领域的应用有了更广泛的了解。我能够更好地选择适合特定场景的工具,并在实际项目中运用它们。这个过程也增强了我理解软件架构和系统设计的能力,让我能够更自信地面对不同领域的技术挑战。