Considere el siguiente código de Go:
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 afirmación del primer tipo funciona cuando declara explícitamente el tipo como func (int) bool. Sin embargo, el segundo que usa el tipo de alias de tipos en pánico.
a diferencia de las afirmaciones de Casting, tipo en comparar estrictamente el tipo real del valor que se afirma. Por lo tanto, el tipo de alias algo, aunque compartiendo la misma firma que Func (int) bool, se considera un tipo distinto.
La afirmación de tipo se realiza en el siguiente código, que simplemente compara los tipos de igualdad:
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 } }
Esta comparación falla cuando se usa el tipo de alias porque requiere una coincidencia de tipo exacta.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3