J'ai un modèle comme ce qui suit:Comment convertir une structure qui a une autre structure dans 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
}
Je veux convertir une instance de clé de TeamsKey. Bien que la structure sous-jacente soit la même, je ne peux pas la convertir.
func main() {
k := Key{}
a := TeamsKey(k)
}
L'erreur que je suis:
tmp/sandbox251934449/main.go:46:15: cannot convert k (type Key) to type TeamsKey
Quand je change TeamsKeyData
-KeyData
en TeamsKey
struct, je peux convertir le struct sans problème. La question est la suivante: pourquoi ne puis-je pas convertir les instances les unes aux autres même si la structure sous-jacente est exactement la même?
Merci!
Il ne s'agit pas de la même structure globale, la conversion de type nécessite des types sous-jacents identiques: https://golang.org/ref/spec#Conversions – JimB
Compte tenu de ce scénario, le mieux que vous pouvez faire est d'écrire une fonction qui prend ce type, crée le nouveau, assigne tous les champs manuellement, puis le retourne. Ou refactoriser de sorte que vous n'avez pas deux structures identiques ... juste celui. – RayfenWindspear
@JimB cela signifie-t-il que même si les structures imbriquées ont la même structure sous-jacente (TeamsKeyData et KeyData), il est impossible de convertir une structure en une autre car TeamsKeyData et KeyData ne sont pas du même type? – user2604150