The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
jonathanchoo

请教 Golang 中如何强转两个字段相同的结构体

  •  
  •   jonathanchoo · Jun 16, 2021 · 2859 views
    This topic created in 1975 days ago, the information mentioned may be changed or developed.

    假如有结构体 A 和结构体 B,其中结构体元素相同,因为某些原因放在了不同的 package 下,在用到的地方如何强转?

    除了 marshal unmarshal

    unsafe package 能解决这个问题吗?

    7 replies  •  2021-07-04 15:58:59 +08:00
    snowlyg
    snowlyg
    Jun 16, 2021
    1
    你说的强转是什么意思?
    sdrzlyz
    sdrzlyz
    Jun 16, 2021❤️1
    2
    字段完全一样的话(包括 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
    }
    ```
    jonathanchoo
    jonathanchoo
    OP
    Jun 16, 2021
    3
    我傻了,结贴
    ElmerZhang
    ElmerZhang
    Jun 16, 2021❤️1
    4
    性能上最好的办法应该是写个转换函数来转,一个字段一个字段的 copy 。
    以前用 Java 写微服务的时候这种情况很常见。我们的解决办法是每一种转换都单独写一个函数,函数里面有的是一个字段一个字段的手动 set,有的是直接用反射来 copy ( Java 里通常叫 Bean Copy )。这样未来万一两个结构体的转换方式有变化,比如字段不是一一对应了,或者 copy 的时候需要做一些转换了,只改这个函数的实现就可以了。
    hemingway
    hemingway
    Jun 16, 2021
    5
    Fu4ng
    Fu4ng
    Jul 4, 2021
    6
    序列化之后再反序列化回来把。
    这相当于深拷贝。。
    Fu4ng
    Fu4ng
    Jul 4, 2021
    7
    @hemingway 感谢分享
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2580 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:17 · PVG 19:17 · LAX 03:17 · JFK 06:17
    ♥ Do have faith in what you're doing.