我有類似下面的模式:如何轉換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