DÉCLARATION DE TYPE:
type A string
3 Réponses :
type A = chaîne code> crée un alias pour chaîne code>. Chaque fois que vous utilisez A code> dans votre code, cela fonctionne comme string code>. Donc, par exemple, vous ne pouvez pas définir les méthodes sur elle. Tapez une chaîne code> Définit un nouveau type, qui a la même représentation que chaîne code>. Vous pouvez convertir entre un A code> et (code> à zéro coût (car ils sont identiques), mais vous pouvez définir des méthodes sur votre nouveau type et que la réflexion saura sur le type. a code>. p>
Alias seulement pour compiler le temps? @ Paul-Hankin
Je ne crois pas qu'il y ait une représentation de l'alias dans les données de réflexion d'exécution, afin que cela puisse être considéré comme un alias de compilation. Est-ce que ça répond à votre question?
@Paulhankin En fait, vous pouvez définir des méthodes sur le type alias, vous ne pouvez tout simplement pas le faire dans ce cas particulier. S'il vous plaît, vois ma réponse
@Paulhankin ah, désolé, mal interprété. comme chaîne. Donc, par exemple, vous ne pouvez pas définir les méthodes sur celui-ci code> - Je suggérerais de reformuler cela pour plus de clarté.
@Grigoriymikhalkin ou vous pouvez dire que vous ne pouvez pas définir des méthodes sur l'alias de type, mais vous pouvez parfois définir des méthodes sur le type d'origine à l'aide de l'alias. Je pense que ce que j'ai écrit est précis (et utile dans le contexte de la question), mais je conviens que cela ne couvre pas tous les cas de bord.
Le formulaire La définition de type vous permet d'étendre un type avec un comportement supplémentaire si vous en avez besoin, ceci sera généralement celui qui est le plus utile en tant que développeur lorsque vous souhaitez créer des types de données personnalisés à partir de types de données de base. P> type A = chaîne code> crée un alias entre les deux, ils ne peuvent pas être étendus à ce stade. À quoi cela résoudra-t-il? Eh bien, pour Golang, ils aident à certaines choses comme le refactoring et la réparation de CodeBase et il y a un excellent article à ce sujet ici: https://talks.golang.org/2016/refactor.article . p>
Pour être clair sur les termes, ces deux sont Type déclarations .
type A struct {}
func (A) print() {
fmt.Println("A")
}
type B A
func (B) print() {
fmt.Println("B")
}
func main() {
a := A{}
b := B{}
a.print() // OUTPUT: A
b.print() // OUTPUT: B
}
Moyenne lorsque j'utilise type A = String, une volonté se comportera exactement comme une chaîne, et peut faire des choses qui peuvent faire du type de chaîne sans aucun type de coulée, comme: - var p a = "SFSDF"; p + "sdfds" fonctionne? et dans la chaîne de type A, un nouveau type est créé ,?
Les deux formulaires sont déclarations de type i>, le 1er formulaire utilise "Déclaration d'alias", le 2e formulaire utilise "Définition de type".
play.golang.com/p/jdiill424d8
Les alias de type ne servent aucun but pendant la "programmation", il n'y a littéralement rien de ce qu'ils font. Ils deviennent utiles lors du refactoring à grande échelle du code. Vous trouverez le débat animé en ligne qui s'est passé avant leur introduction. Vous n'en avez essentiellement jamais besoin (et vous devriez pas i> les utiliser!) Jusqu'à ce que vous en avez besoin.