跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 问老哥们一个 go gorm 的问题
未分類
31 5 月 2020

问老哥们一个 go gorm 的问题

问老哥们一个 go gorm 的问题

資深大佬 : ifconfig 11

type Countries struct {  ID    uint32 `json:"id"`  Name  string `json:"name"`  Image string `json:"image" sql:"-"` }  type CountriesAll struct {  Countries  IsComment uint8 `json:"is_common"` } 

举个例子,A 接口可能需要 Countries 的数据,B 接口可能需要 CountriesAll 的数据,C 接口需要 CountriesSimple 的数据,这样岂不是要定义蛮多个结构体的?

现在的烦恼是,用户表有十几个字段,可能一些接口只需要精简的字段,一些接口需要完整的字段,给后台的接口又是另外一些字段,所以为了保持接口的精简和一些不必要的字段输出,在一个 model 内定义多个结构体,这样合理么?还是大家是怎么做的?

PS:不过据我所知哈,身边的写 go 的朋友是用 sql 原生写法,不存在这个问题,只不过我比较喜欢模型的写法写起来比较精简也好维护

大佬有話說 (8)

  • 資深大佬 : lvsshuttao

    我平时都是这样写的
    “`
    type Country struct { // 用于数据库的结构体,没有多余的字段
    Id int64 `json:”id”`
    CreatedAt time.Time `json:”created_at”`
    UpdatedAt time.Time `json:”updated_at”`
    Name string `json:”name”`
    Image string `json:”image”`
    }

    type ParamCountry struct { // 用于创建记录的结构体
    Id int64 `json:”id”`
    Name string `json:”name”`
    Image string `json:”image”`
    }

    func (p *ParamCountry) ToModel() model.Country {
    return model.Country{
    Id: p.Id,
    // …
    }
    }

    type RespCountry struct { // 用于返回数据的结构体
    Id int64 `json:”id”`
    Name string `json:”name”`
    Image string `json:”image”`
    }

    func (p *RespCountry) FromModel(m *model.Country) {
    p.Id = m.Id
    // …
    }

    type RespCountryDetail struct { // 扩展了 RespCountry
    RespCountry
    // 更多的字段
    }
    “`

    分开写有利于扩展;比如查询结果需要其它表字段,就可以直接往 `RespCountry` 中添加其它表的字段;如果查询参数需要支持按关键字 `keyword`(不属于任何表) 查询,也可以直接往 `ParamCountry` 添加

  • 資深大佬 : airplayxcom

    送你一把梭子 https://github.com/airplayx/gormat

  • 主 資深大佬 : ifconfig

    @airplayxcom 我用在线版的 https://dev.ataotaoa.com/

  • 資深大佬 : zjj19950716

    https://colobu.com/2020/03/19/Custom-JSON-Marshalling-in-Go/

  • 資深大佬 : zjj19950716

    @zjj19950716 https://zhuanlan.zhihu.com/p/27472716

  • 主 資深大佬 : ifconfig

    @zjj19950716 学习到了,感谢分享

  • 資深大佬 : yrj

    好巧,正好这几天也在用 gorm,也遇到了主同样的问题。持续关注。

  • 資深大佬 : Hanggi

    一个 model 应该对应一个表,如果你有多种数据格式返回的需求,应该创建多个不同的 struct 专门用于返回。
    可以借鉴 #5 给的链接里得各种方法,把不同的返回结构进行拆分、合并、嵌套。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具