2 votes

GoLang : Signification sémantique d'une propriété enveloppée entre parenthèses ?

Nouveau ici - j'ai rencontré le bout de code Go suivant que je n'ai pas écrit

if tc, ok := tng.(ThingClasser); ok {
    //... faire quelque chose ...
}

Je ne comprendrai pas la sémantique de tng.(ThingClasser).

À certains égards, cela ressemble à un appel de méthode - c'est-à-dire qu'il y a deux variables (tc, ok) prêtes à accepter des valeurs de retour multiples.

Cependant, tng.(ThingClasser) lui-même semble être un accès à une propriété, pas un appel de méthode.

Cependant, les parenthèses autour de ThingClasser sont une subtilité que je n'ai jamais vue auparavant. De plus, si cela importe, le symbole ThingClasser est défini ailleurs dans ce projet en tant qu'interface, donc je pense peut-être que c'est un peu de sucre syntaxique autour de un est-ce que cela implémente une interface - mais alors les deux valeurs de retour m'ont confus.

Google n'a rien donné de concret, mais c'est l'une de ces choses difficiles à rechercher sur Google.

Est-ce que quelqu'un ici sait ce qu'est cet appel/syntaxe en GoLang, et pourrait éventuellement me diriger vers les pages manuel pertinentes pour que je puisse RTFM?

3voto

Adrian Points 2692

C'est une assertion de type. Les valeurs retournées sont 1) l'objet, converti au type donné; et 2) un booléen indiquant si la conversion a réussi. ThingClasser est le type vers lequel la conversion est effectuée. La documentation peut être trouvée ici: https://golang.org/ref/spec#Type_assertions

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X