我有类似下面的模式:如何转换Golang中包含其他结构的结构?
type TeamsKey struct {
KeyData TeamsKeyData
Fingerprint string
Algorithm string
Encoding string
Usage string
}
type TeamsKeyData struct {
KeyId string
Key string
Description string
ExpiresAt string
CreatedAt string
}
type Key struct {
KeyData KeyData
Fingerprint string
Algorithm string
Encoding string
Usage string
}
type KeyData struct {
KeyId string
Key string
Description string
ExpiresAt string
CreatedAt string
}
我想关键的一个实例转换TeamsKey。虽然底层结构相同,但我无法将其转换。
func main() {
k := Key{}
a := TeamsKey(k)
}
我得到的错误:
tmp/sandbox251934449/main.go:46:15: cannot convert k (type Key) to type TeamsKey
当我在TeamsKey
结构改变TeamsKeyData
到KeyData
,我可以转换结构没有问题。
问题是,为什么我不能将实例转换为对方,即使底层结构完全相同?
谢谢!
它不是相同的整体结构,类型转换需要相同的基础类型:https://golang.org/ref/spec#Conversions – JimB
鉴于此场景,您可以做的最好的方法是编写一个采用该类型的函数,创建新的,手动分配所有的字段,然后返回它。或重构,所以你没有两个相同的结构...只是一个。 – RayfenWindspear
@JimB所以这意味着即使嵌套的结构体也具有相同的基础结构(TeamsKeyData和KeyData),因为TeamsKeyData和KeyData不是同一类型,所以不可能将一个结构转换为另一个结构? – user2604150