gpt4 book ai didi

go - 如何将结构转换为具有较少字段的不同结构

转载 作者:行者123 更新时间:2023-12-02 08:08:13 25 4
gpt4 key购买 nike

我正在尝试将 Big 类型的结构复制为 Small 类型,而无需显式创建具有相同字段的 Small 类型的新结构。

我尝试过搜索其他类似的问题,例如 thisthis然而,只有当结构具有相同的字段时,不同结构类型之间的所有转换才会发生。

这是我尝试做的示例:

// Big has all the fields that Small has including some new ones.
type Big struct {
A int
B string
C float
D byte
}

type Small struct {
A int
B string
}

// This is the current solution which I hope to not use.
func ConvertFromBigToSmall(big Big) Small {
return Small{
A: big.A,
B: big.B,
}
}

我希望能够做这样的事情,但它不起作用:

big := Big{}
small := Small(big)

有没有一种方法可以在不使用Convert函数的情况下在BigSmall之间进行转换(甚至反之亦然)?

最佳答案

对此没有内置支持。如果您确实需要这个,您可以编写一个使用反射来复制字段的通用函数。

或者你可以重新设计。如果 BigSmall 加上一些其他附加字段,为什么不在 Big 中重用 Small 呢?

type Small struct {
A int
B string
}

type Big struct {
S Small
C float
D byte
}

然后,如果您有一个 Big 结构,那么您也有一个 Small:Big.S。如果您有一个Small并且需要一个Big:Big{S:small}

如果您担心失去较短字段名称的便利性或不同的编码结果,请使用嵌入而不是命名字段:

type Big struct {
Small // Embedding
C float
D byte
}

那么这些也是有效的:Big.ABig.B。但如果您需要 Small 值,则可以使用非限定类型名称作为字段名称来引用嵌入字段,例如大.小(参见Golang embedded struct type)。同样,要从 Small 创建 Big:Big{Small:small}

关于go - 如何将结构转换为具有较少字段的不同结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58006857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com