go小白入门 | 青训营笔记

87 阅读2分钟

青训营课程笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天,今天主要学习了go框架三件套以及gorm、kitex、hertz的运用。

介绍

gorm是一个强大的orm框架,kitex是微服务rpc框架,hertz是字节内部HTTP框架

使用操作

1.gorm支持mysql,sqlserver,sqlite等数据库,下列是如何连接数据库(以sqlserver为例)

import (
"gorm.io/driver/sqlserver"" gorm.io/gorm"// github . com/denisenkom/ go-mssqldb
dsn := "sqlserver: / / gorm:LoremIpsum86@localhost:9930?database=gorm"
db,err := gorm.Open(sqlserver.Open(dsn),&gorm.Config{})

gorm是通过驱动来连接数据库,其他数据库可能需要开发或者复用其他驱动,同时也学习了gorm进行事务、gorm hoook、生态、数据建立、查询、更新数据和删除数据(软删、物理删除)。同时对于性能提高 ,寻常时会因为事务内运行导致新能降低这时候我们要用SkipDefaultTrasaction来关闭默认事务;同时也可以通过 PrepareStmt来提高调用速度。

2.需要先安装kitex代码生成工具,我们需要首先定义IDL

namespace go api
struct Request {1: string message
}
struct Response {1: string message}
service Echo {
Response echo(1: Request req)
}

然后我们可以使用kitex自己来生成代码kitex -module example -service example echo.thrift 接下来要学会使用kitex client发送请求

import "example/kitex_gen/api"...
req := &api . Request {Message: "my request""3
resp,err := c.Echo(context.Background(),req,callopt.WithRPCTimeout(3*time . Second))if err != nil {
log.Fatal(err)
}
log .Println(resp)

发送请求之后需要进行服务注册和发现,因为需要搭建微服务框架。

3.在实现http框架的时候需要设置一个get方法的路由函数,一个生成元信息,一个去做元处理。同时hertz也提供了路由组的能力,用于支持路由分组

// Simple group: v1
v1 := h.Group( relativePath: " /v1")
{
// loginEndpoint is a handler func
v1.POST( relativePath: " /login" , loginEndpoint)
v1.PoST( relativePath: " / submit" ,submitEndpoint)
v1.POST( relativePath: " /streaming_read" , readEndpoint)
}
// Simple group: v2
v2 := h.Group( relativePath: " /v2") {
v2.POST( relativePath: " / login" , loginEndpoint)
v2.POST( relativePath: " /submit", submitEndpoint)
v2.POST( relativePath: " /streaming_read" , readEndpoint)
}

参数路由则是添加了param的。后续还学习了相关中间件和hertz client(用于帮助用户进行http请求的发送)。同时hertz也具有自动生成代码的hz可以方便我们接下来的编程工作。hertz具有的性能有网络库netpoll、json编解码sonic和使用sync.pool复用对象协议层数据解析优化等功能。