从隔壁PHP转来的 问个web场景中参数和struct结构和名称不一致的问题

初步学了两三天也玩了玩beego、gin、echo啥的总的来说也都大同小异没啥特别难的坎

就是有个疑问一直觉得很别扭

拿gin & grom来说

  • reuqest处理
    ctx.ShouldBind(&a)就可以尝试给一个已实例化(姑且这么叫)的对象fill值没报错就fill成功了,非大写开头的还fill不上

  • model和response处理

    //                        接上面的a
    db.Where('id =?', ctx.Query(a.Uid)).First(&user)

    fill给了user 现在user有值了

假设User是这么定义的

type User struct {
    Id uint64
    Name string
    Gender uint
}

我怎么输出这个User成JSON给接口呢?ok,当然可以在Field上加上Tag变成Id uint64 'json:"id或者uid"'
但是如果我不想直接用model的struct输出呢?我内部业务的结构不想这么改呢?
比如写php的时候可以是返回一个数组对应go的map[string]interface{}?然后response会经过一层transfomer,实际输出的结构和数据库里的结构是不一样的。

go里面这个怎么写?问了问同转go的phper~~ 告诉我……一个个手动赋值。。。

总结一下:
问题是,go怎么方便的处理 request、model、response 同一个对象三套不同的struct(特指fieldname) 不同的场景。有没有什么奇技淫巧?
比如定义好struct后,把model的struct转json再 Unmarshal(&response.s) ?就成功的用model的值fill给了用于response的struct?

讨论数量: 9

github.com/fitv/min/blob/main/app/...
最近有写个类似的东西,可以自定义响应字段

1周前 评论

没搞懂。php transfomer/resource处理返回的数据的时候,不也是需要一对一赋值吗?

1周前 评论

@Mr-houzi php 不一样。php可以很[灵活]的 merge进去一个数组里
还有magic method辅助,接口有JsonSerializable.

就是突然一下子不知道这些东西在go里咋搞。比如php我现在 return new xxxresponse($usermodel,$articlemodel)
我内部实现可能是 $userModel->toArray() 或者 $userModel->only() 我还能支持 $userModel->get('field as field2')

有没有什么奇技淫巧

1周前 评论
Mr-houzi 1周前
cevin (作者) (楼主) 1周前
Mr-houzi 1周前
cevin (作者) (楼主) 1周前
Mr-houzi 1周前
giao哥

你可以看下开源项目是如何定义的

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!