Considérez le code GO suivant:
package main import "fmt" type somethingFuncy func(int) bool func funcy(i int) bool { return i%2 == 0 } func main() { var a interface{} = funcy _ = a.(func(int) bool) // Works fmt.Println("Awesome -- apparently, literally specifying the func signature works.") _ = a.(somethingFuncy) // Panics fmt.Println("Darn -- doesn't get here. But somethingFuncy is the same signature as func(int) bool.") }
La première assertion de type fonctionne lors de la déclaration explicite du type comme func (int) bool. Cependant, le second en utilisant le type alias quelque chose de paniques.
Contrairement à la coulée, les assertions de type dans GO comparent strictement le type réel de la valeur affirmée. Par conséquent, le type alias quelque chose Funcy, bien que partageant la même signature que func (int) bool, est considéré comme un type distinct.
L'affirmation de type est effectuée dans le code suivant, qui compare simplement les types pour l'égalité:
func main() { var a interface{} = funcy switch v := a.(type) { case func(int) bool: // Type successfully asserted as func(int) bool case somethingFuncy: // Type successfully asserted as somethingFuncy default: // Type assertion failed } }
Cette comparaison échoue lors de l'utilisation de l'alias de type car il nécessite une correspondance de type exact.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3