假如有结构体 A 和结构体 B,其中结构体元素相同,因为某些原因放在了不同的 package 下,在用到的地方如何强转?
除了 marshal unmarshal
unsafe package 能解决这个问题吗?
1
snowlyg 2021-06-16 11:27:15 +08:00
你说的强转是什么意思?
|
2
sdrzlyz 2021-06-16 11:28:15 +08:00 1
字段完全一样的话(包括 tag )是这可以直接转换的
``` type A struct { Name string } type B struct { Name string } func TestX(t *testing.T) { a := A{} var b B b = B(a) _ = b } ``` |
3
jonathanchoo OP 我傻了,结贴
|
4
ElmerZhang 2021-06-16 11:36:37 +08:00 1
性能上最好的办法应该是写个转换函数来转,一个字段一个字段的 copy 。
以前用 Java 写微服务的时候这种情况很常见。我们的解决办法是每一种转换都单独写一个函数,函数里面有的是一个字段一个字段的手动 set,有的是直接用反射来 copy ( Java 里通常叫 Bean Copy )。这样未来万一两个结构体的转换方式有变化,比如字段不是一一对应了,或者 copy 的时候需要做一些转换了,只改这个函数的实现就可以了。 |
5
hemingway 2021-06-16 13:07:45 +08:00
|
6
Fu4ng 2021-07-04 15:56:24 +08:00
序列化之后再反序列化回来把。
这相当于深拷贝。。 |