这是我参与「第五届青训营 」笔记创作活动的第2天
前言
在学习前了解到:
1.Web框架(WEC):
- Echo: Echo是一个高性能、简单易用的Web框架。它支持路由、中间件、模板引擎等功能,并且具有良好的扩展性。
- Gin: Gin是一个类似于Martini的Web框架,它提供了一个简洁的API,支持路由、中间件、模板引擎等功能。
- Revel: Revel是一个全功能的Web框架,支持路由、中间件、模板引擎等功能,并且具有良好的文档和社区支持。
2.RPC框架(RPC):
- gRPC: gRPC是一个高性能、开源的RPC框架,支持多种语言,并提供了丰富的特性,如流式传输、健康检查、负载均衡等。
- Thrift: Thrift是一个跨语言的RPC框架,支持多种语言,并提供了丰富的特性,如序列化、多路复用、协议压缩等。
- Go-Micro: Go-Micro 是一个开源的微服务工具套件, 提供了RPC, 服务发现, 负载均衡, 消息队列等功能。
3.ORM框架(ORM):
- Gorm: Gorm 是一个简单而强大的 ORM 框架,支持多种数据库类型,支持链式操作。
- Xorm: Xorm 是一个简单而高效的 ORM 框架,支持多种数
今天主要学习了: Gorm的基础使用,Kitex的基础使用,Hertz的基础使用
1、gorm的基础使用
- 安装:
go get -u github.com/jinzhu/gorm - 导入:
import "github.com/jinzhu/gorm" - 初始化:
Copy code db, err := gorm.Open("mysql", "username:password@/dbname?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic("连接数据库失败")
}
defer db.Close()
-
GORM目前支持的数据库:MySQL、sQLServer、 PostgreSQL、 SQLite
import ( ' gorm. io/driver/sqlserver" "gorm. io/ gorm" 连接SQLServer数据库为例 ) import ( ' gorm. io/driver/sqlserver" "gorm. io/ gorm" 连接SQLServer数据库为例 ) // github . com/deni senkom/ go-mssqldb dsn := "sqlserver://gorm: LoremIpsum86@localhost:9930?database=gorm" db, err := gorm. Open(sqlserver . Open(dsn), &gorm. Config{})通过驱动来连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动。
-
创建表:
Copy code type User struct {
gorm.Model
Name string
Age int
}
db.AutoMigrate(&User{})
- 增加数据:
Copy code user := User{Name: "John", Age: 22}
db.Create(&user)
- 查询数据:
Copy code var users []User
db.Find(&users)
- 更新数据:
Copy code var user User
db.First(&user, 1)
user.Name = "Jack"
db.Save(&user)
- 删除数据:
Copy code var user User
db.First(&user, 1)
db.Delete(&user)
gorm 的性能提高
db, err := gorm . OpenCmysql. Open( dsn: "username : password@tcp(Localhost : 9910)/database?charset=utf8"),
&gorm. Config{
SkipDefaultTransaction: true, //关闭默认事务
PrepareStmt :
true}, // 缓存预编译语句
)
iferr!=nil{
panic( V: "failed to connect database")
对于写操作(创建、更新、删除),为 了确保数据的完整性,GORM会将它们封装在事务内运行。 但这会降低性能,我们可以使用SkipDefaultTransaction关闭默认事务。 使用PrepareStmt缓存预编译语句可以提高后续调用的速度,本机测试提高大约35 %左右。
2、Kitex的基础使用
定义IDL
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Echo {
Response echo(1: Request req)
}
Kitex生态
| XDS扩展 | https://github .com/kitex -contrib/xds |
| opentelemetry扩展 | github.com/kitex- contrib/obs opentelemetry |
| ETCD服务注册与发现扩展 | github.com/kitex-contr… |
| Nacos服务注册与发现打展 | htptp:/github.com/kitex- contrib/registry-nacos |
| Zookeeper服务注册与发现扩展 | github.com/kitex- contrib/registry-zookeeper |
| polaris扩展 | https://github .com/kitex contrib/polaris |
| 丰富的示例代码与业务Demo | htptp://github.com/cloudwego/kitex examples/ |
3、Hertz的基础使用
(1) Hertz路由:
Hertz提供了GET、POST、 PUT、DELETE、 ANY等方法用于注册路由。
I func RegisterRoute(h *server . Hertz) {
h. GET( relativePath: "/get", func(ctx context.Context, c *app . RequestContext) {
c. String(consts . StatusOK,format: "get")
}
h. POST( relativePath: "/post", func(ctx context.Context, c *app . RequestContext) {
c. String(consts . Status0K,format: "post" )
}
h. PUT( relativePath: "/put", func (ctx context . Context, c *app . RequestContext) {
c. String(consts. Status0K,format: "put")
})
h. DELETE( relativePath: " /delete",func(ctx context. Context, c *app . RequestContext) {
c.String(consts . StatusOK,format: "deLete")
})
h. PATCH( relativePath: "/patch", func (ctx context . Context, c *app . RequestContext) {
c. String(consts . StatusOK,format: "patch" )
}
h. HEAD( relativePath: " /head", func (ctx context . Context, c *app . RequestContext) {
c. String(consts . Status0K,format: "head")
}
h. OPTIONS( relativePath: "/options", func(ctx context. Context, c *app. RequestContext) {
c. String(consts . Status0K,format: " options" )
Hertz提供了GET、POST、PUT、DELETE、ANY等方法用于注册路由。
Hertz提供了路由组( Group )的能力,用于支持路由分组的功能
Hertz提供了参数路由和通配路由,路由的优先级为:静态路由>命名路由>通配路由
(2) Hertz代码生成工具
目录结构:
(3)Hertz生态
| HTTP2扩展 | https://github. .com/hertz-contrib/http2 |
| opentelemetry扩展 | htps://github.com/hertz contrib/obs -opentelemetry |
| 国际化扩展 | github.com/hertz contrib/i18n |
| 反向代理扩展 | htts://github. com/hertz contriblreverseproxy |
| JWT鉴权扩展 | https://github. com/hertz -contrib/jwt |
| Websocket扩展 | https://github .com/hertz -contrib/websocket |
| 丰富的示例代码与业Demo | github.com/cloudwego/h… examples/ |