我想利用gRPC 和 xorm 实现数据库查询 比如:
type Info struct{
Age int //数据库中此字段是int
}
由于gRPC中只有int32类型 所以只能:
message _Info struct{
int32 Age = 1;
}
数据库查询的时候由于字段类型的缘故
无法直接以 Get(&_Info)
来获取,并直接传输走
只能进行赋值
info :=Info{}
Get(&info)
_Info.Age = info.Age
再把_Info
传输走
但是如果查询的结构体中字段超多怎么办?
只能一个个对应赋值么?
有没有别的优雅点的办法
(我知道golang 有个net/rpc库,支持int。但我就是想知道用gRPC的话怎么解决)
有疑问加站长微信联系(非本文作者)

自己写个工具用反射解决不行么
你这个跟
xorm
gRPC
没什么关系吧。 xorm 映射的结构体是Info
, gRPC对应的是_Info
,两个结构体除了看着像,根本就不是一个struct。首先就不能被int
和int32
带偏了。可以按照1L说的那样写个工具类,比如类似Java的BeanUtils.copyProperties
额 那好吧 我自己写吧
还以为能有什么偷懒的方法
数据库中此字段是int
????
数据库没oglang 的int这个类型啊……
golang中的int是一个不定长度变量,由架构决定是int32还是int64。
严格来说,用于持久化的数据库对应的orm 对象也该是定好int32还是int64的
2楼 @zzustu 就我理想是,可以直接用proto的结构体直接用来接收查询结果,直接返回就得了 那还是自己写个小工具吧
= =
那样直接用
_Info
接收数据库的查询,有什么不可吗?实在不行数据类型改一致。都改成int32
啊 是我没表述清楚
用xorm的话,他只有int 和 BigInt类型
这不就跟proto的结构体不能同用一个了么。。
要有个重新赋值给另一个结构体过程
我就想问问有没有什么巧妙优雅的方法解决一下
xorm不支持int32啊。。。。
只有int 和 BigInt
直接用这个int32的结构体去Get 是搜不到的。。。
你的意思是使用xorm框架。如果struct里面定义的有int32的field,会报错?
数据库里面有TINYINT类型go没有这种类型,难道非要让golang造一个TINYINT类型与之对应么。感觉你自己都没太理解这些东西
xorm是一款go orm吧?
go orm怎么会有bigint这种go没有的数据类型……
去看了下xorm的文档
https://gobook.io/read/gitea.com/xorm/manual-zh-CN/chapter-02/1.mapping.html
https://gobook.io/read/gitea.com/xorm/manual-zh-CN/chapter-02/5.types.html
你所谓的int和bigint明显是数据库字段类型
明显数据库int对应的是int32那一堆
数据库的的bigint对应的是int64/uint64
所以很多时候不建议直接用orm啊,容易搞不清实际的语言和数据库对应关系……
你要么看看xorm的tag model定义 看看能不能找到有用的内容帮助你定义出来int32
总可以看到你
空虚寂寞冷不行啊
@focusonline 哈哈哈哈哈哈,出来玩耍
要离职了.不玩了.回家种地去喽.
@focusonline 不行,不能跑路
没办法, 这边不出钱了, 想不走也不行啊
@focusonline 你在哪里讨生活呀
魔都.月黑风高的冒险家乐园
@focusonline 来帝都玩呀
没钱没美女没空... 哈哈哈
@focusonline 美女一箩筐,票子一大把
是这样的
用xorm框架的话,操作数据库,struct里面不能用int32这个类型。
xorm是int类型代表了除64位以外的int。64的用BigInt
所以利用xorm就用不了int32,如果用int32的话搜不到东西。
所以我现在 proto + xorm 就不得不出现两个结构体, xorm:int版本结构体 , proto:int32版本结构体。。。
这之间就必须出现一个赋值操作,就感觉很蛋疼
就感觉本应该很干脆的事儿
结果因为这个数据类型
从xorm获取后不能直接返回
好恶心
用自定义 field也不行?
https://gobook.io/read/gitea.com/xorm/manual-zh-CN/chapter-02/4.columns.html
不能。。。
目前我只能再写个结构体,然后再写个赋值的方法
看着一堆结构体就烦
那干脆都用int64呢
我擦。。。居然可以
是我格局小了
😂