Maison >développement back-end >Golang >Pourquoi ne puis-je pas attribuer un type générique à un autre en Go, même si leurs arguments de type sont compatibles ?

Pourquoi ne puis-je pas attribuer un type générique à un autre en Go, même si leurs arguments de type sont compatibles ?

DDD
DDDoriginal
2025-01-04 12:30:33647parcourir

Why Can't I Assign One Generic Type to Another in Go, Even If Their Type Arguments Are Compatible?

Comprendre les restrictions d'attribution de types génériques

Dans Go, un générique ne peut pas être attribué à un autre même si leurs arguments de type peuvent être dus à la nature de l'instanciation générique.

Types génériques dans Go

Les types génériques autorisent pour la réutilisation du code en définissant un modèle pouvant être utilisé avec différents types de données. Lorsque vous instanciez un type générique, vous fournissez des arguments de type concrets pour spécifier le type de données spécifique utilisé.

Restrictions d'affectation

L'attribution d'une valeur d'un type générique à un autre peut ne soit pas toujours autorisé. En effet, l'instanciation d'un type générique avec des arguments de type différents donne lieu à deux types nommés distincts.

Par exemple :

type Props[G Generic] struct{}

type Example struct{}

func (Example) ID() string { return "" }

var ExampleProps = Props[Example]{}

func Problem() Props[Generic] {
    return ExampleProps // Compilation error
}

Dans cet exemple, Exemple implémente l'interface générique. Cependant, Props[Example] et Props[Generic] sont toujours considérés comme des types différents. Par conséquent, l'attribution de SampleProps (qui est de type Props[Example]) à Problem (qui renvoie Props[Generic]) n'est pas autorisée.

Résolution

Si vous le souhaitez pour attribuer des valeurs entre types génériques, vous pouvez instancier le type générique avec un paramètre de type. Par exemple :

func Problem[T Generic](v T) Props[T] {
    return Props[T]{Value: v}
}

Dans ce cas, Problem prend un paramètre générique T et instancie Props avec T. Cela permet plus de flexibilité et peut être utilisé dans des situations où les arguments de type répondent à des conditions spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn