Go 语言进阶(一) -- Go hertz http框架、kitex RPC微服务框架、gorm 数据库框架三件套用法详解

Go 框架三件套

1. 概论

  • Gorm

    Gorm 是一个已经迭代了10年+的功能强大的 ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。

  • Kitex

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

  • Hertz

    Hertz 是字节内部的 HTTP框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点

2. Gorm

官方文档

 //定义 gorm model 
type Product struct {
	Price uint Code string
}
为 model 定义表名
func (p Product) TableName() string { 
	return "product";
} 
func main(){
  db,err := gorm.0pen(
    连接数据库 
  mysgl.0pen(dsn:"user:passtcp(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, 1) // 根据整形主键查找 
  db.First(&product,"code = ?", "D42")// 查找 code 字段值为 D42 的记录
  // Update - 将 product 的 price 更新为 200 更新数据 
  db.Model(&product).Update("Price"200)// Update - 更新多个字段
  db.Model(&product).Updates(Product{Price: 200,Code:"F42"})// 使用结构体 仅更新非零值字段
  db.Model(&product).Updates(map[stringlinterface{}{"Price": 200. "Code": "F42"})
  // Delete -删除 product 删除数据 
  db.Delete(&product, 1)
 } 

Notes

  • updates 传递结构体时 仅更新非零值字段,即显性初始化字段

  • GORM 目前支持的数据库MySQL, SQLServer, PostgreSQL, SQLite; GORM 通过驱动来连接数据库,如果需要连接其它类型数据库,可以复用或自行开发驱动

  • GORM 查询:

    First 的使用踩坑: 使用 First 时,需要注意查询不到数据会返回 ErrRecordNotFound。使用 Find 查询多条数据,查询不到数据不会返回错误。

    当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、"、false 或其他 零值,该字段不会被用于构建查询条件,使用 Map 来构建查询条件。

  • 删除数据:

    软删除 会记录 Deleted gorm.DeletedAt 字段;

    拥有软删除能力的 Model 调用 Delete 时,记录不会被数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间,并且不能再通过正常查询的方法找到该记录。

    使用 Unscoped 可以查询到被软删除的数据。

  • 事务:

    一致性要求比较高的时候,使用事务; Gorm 提供了 Begin, Commit, Rollback 方法用于使用事务

    Transactions by manual

    //Transactions by manual
    // begin a transaction
    tx := db.Begin()
    
    // do some database operations in the transaction (use 'tx' from this point, not 'db')
    tx.Create(...)
    
    // ...
    
    // rollback the transaction in case of error
    tx.Rollback()
    
    // Or commit the transaction
    tx.Commit()
    

    Transaction

    db.Transaction(func(tx *gorm.DB) error {
      // do some database operations in the transaction (use 'tx' from this point, not 'db')
      if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
        // return any error will rollback
        return err
      }
    
      if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
        return err
      }
    
      // return nil will commit the whole transaction
      return nil
    })
    
  • Hook

    GORM 在 提供了 CURD 的 Hook 能力; Hook 是在创建、查询、更新、删除等操作之前、之后自动调用的函数。
    如果任何 Hook 返回错误,GORM 将停止后续的操作并回滚事务。
    Gorm 生态
    在这里插入图片描述

3. Kitex

官方教程

生态
在这里插入图片描述

4.Hertz

官方教程

生态
在这里插入图片描述

5. 应用实战项目

字节开源项目,整个项目应用了三件套作为开发框架,可供快速入门学习。
easynote

图片均来自字节青训营课程,博客作为自己学习记录,如有侵权,麻烦联系删除。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hertz-Damp碰撞单元模型是一种常用的模拟碰撞效应的数值模型,可以用于研究多跨简支梁桥的碰撞效应。在使用OpenSees建立Hertz-Damp碰撞单元模型时,需要进行以下步骤: 1. 导入OpenSees库:首先,您需要导入OpenSees库以使用其中的函数和类。 2. 定义模型参数:您需要定义梁桥的几何属性、材料属性以及碰撞参数。几何属性包括梁桥的长度、宽度和高度等;材料属性包括梁桥材料的弹性模量和泊松比等;碰撞参数包括碰撞物体的质量、速度和初始位置等。 3. 创建节点和杆件:使用OpenSees提供的节点和杆件类,创建梁桥的节点和杆件,并定义节点之间的连接关系。 4. 定义初始状态:设置梁桥的初始状态,包括节点的初始位移和速度等。 5. 定义碰撞加载:使用OpenSees提供的加载函数,定义碰撞物体对梁桥的加载方式。可以根据需要设置不同的碰撞加载模式,例如冲击加载或连续加载。 6. 设置边界条件:根据问题的具体要求,设置梁桥的边界条件,例如简支边界条件或固支边界条件。 7. 运行模拟:使用OpenSees提供的求解器,运行碰撞模拟,并获取结果。 通过以上步骤,您可以使用OpenSees建立Hertz-Damp碰撞单元模型,并进行多跨简支梁桥的碰撞效应研究。请注意,在实际使用中,您可能需要根据具体的问题和数据进行参数调整和模型验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值