问老哥们一个 Golang Go语言中 gorm 的问题

问老哥们一个 Golang Go语言中 gorm 的问题

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 原生写法,不存在这个问题,只不过我比较喜欢模型的写法写起来比较精简也好维护


更多关于问老哥们一个 Golang Go语言中 gorm 的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

我平时都是这样写的
<br>type Country struct { // 用于数据库的结构体,没有多余的字段<br> Id int64 `json:"id"`<br> CreatedAt time.Time `json:"created_at"`<br> UpdatedAt time.Time `json:"updated_at"`<br> Name string `json:"name"`<br> Image string `json:"image"`<br>}<br><br>type ParamCountry struct { // 用于创建记录的结构体<br> Id int64 `json:"id"`<br> Name string `json:"name"`<br> Image string `json:"image"`<br>}<br><br>func (p *ParamCountry) ToModel() model.Country {<br> return model.Country{ <br> Id: <a target="_blank" href="http://p.Id" rel="nofollow noopener">p.Id</a>,<br> // ...<br> }<br>}<br><br>type RespCountry struct { // 用于返回数据的结构体<br> Id int64 `json:"id"`<br> Name string `json:"name"`<br> Image string `json:"image"`<br>}<br><br>func (p *RespCountry) FromModel(m *model.Country) {<br> <a target="_blank" href="http://p.Id" rel="nofollow noopener">p.Id</a> = <a target="_blank" href="http://m.Id" rel="nofollow noopener">m.Id</a><br> // ...<br>}<br><br>type RespCountryDetail struct { // 扩展了 RespCountry<br> RespCountry<br> // 更多的字段<br>}<br>

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

更多关于问老哥们一个 Golang Go语言中 gorm 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


学习到了,感谢分享

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

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

当然,我很乐意帮你解答关于Go语言中GORM的问题。

GORM 是一个在 Go 语言社区中非常流行的 ORM(对象关系映射)库,它允许开发者以更简洁和高效的方式与数据库进行交互。

如果你在使用 GORM 时遇到了问题,这里有几个常见的排查步骤和技巧,希望能帮到你:

  1. 检查数据库连接: 确保你的数据库连接字符串是正确的,并且数据库服务正在运行。常见的连接问题包括错误的用户名、密码、主机名或端口。

  2. 查看日志和错误信息: GORM 提供了详细的日志记录功能,你可以通过配置日志模式来获取更多关于数据库操作的详细信息。这有助于你定位问题所在。

  3. 检查模型定义: 确保你的模型定义符合 GORM 的规范,包括正确的标签(tags)和字段类型。

  4. 理解 GORM 的查询和更新机制: GORM 提供了丰富的查询和更新方法,但有时候你可能需要理解其底层的 SQL 语句来确保你的操作是符合预期的。

  5. 查看文档和社区资源: GORM 的官方文档非常详细,涵盖了大部分的使用场景。此外,你也可以在 Stack Overflow、GitHub Issues 等社区平台上查找或提问。

如果你有更具体的问题或错误信息,提供出来将有助于我给出更精确的帮助。希望这些建议能对你有所帮助!

回到顶部