为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中使用清晰的结构值优化性能?

如何在 Go 中使用清晰的结构值优化性能?

Go
潇湘沐 2021-07-26 09:26:43
我的 API 服务器接受 post 请求,请求正文是 JSON,所以我创建了两个 struct 对象来接受 JSON 字符串并将其持久化到数据库中。但是每次我接受请求时,我都需要一遍又一遍地创建 struct 对象,我尝试清除结构而不是重新创建它。演示代码如下://The two structtype Card struct {  Number string  Type   string}type Person struct {  Name string  Cards []Card}var p Person//parse JSON to the struct objectfunc init() {  str := `{"name":"aaa","cards":[{"number":"1","type":"visa"},{"number":"2","type":"mastercard"}]}`  json.Unmarshal([]byte(str), &p)}func PersistToDatabase() {  var err error  tx, err := db.Begin()  if err != nil {    return  }  defer func() {    if err != nil && tx != nil {      if err := tx.Rollback(); err != nil {        return      }    }  }  finish := make(chan bool)  stmt1, err := tx.Prepare(`insert into tb1(name) values(?)`)  if err != nil {    panic(err.Error())  }  defer stmt1.Close()  stmt2, err := tx.Prepare(`insert into tb2(name, num, type) values(?, ?, ?)`)  if err != nil {    panic(err.Error())  }  defer stmt2.Close()  go func() {    defer func() { finish <- true }()    if _, err = stmt1.Exec(p.name); err != nil {      log.Println("stmt1.Exec: ", err.Error())      return    }    for _, x := range p.Cards {      if _, err = stmt2.Exec(p.name, x.Number, x.Type); err != nil {        log.Println("stmt2.Exec: ", err.Error())          return      }    }  }  <-finish  //clear struct object  p.Name = ""  p.Cards = nil //have anything do this better?}在代码底部,我清除了 Name 元素,但让 Cards 元素成为了nil,我该如何做得更好?我的数据库操作有问题吗?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信