"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Razones para la falla del tipo de alias de tipo GO

Razones para la falla del tipo de alias de tipo GO

Publicado el 2025-04-12
Navegar:204

Why Does Go's Type Assertion Fail with Type Aliases?

cómo lanzar a un tipo de alias en Go?

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.

explicación

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.

bonus

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.

Último tutorial Más>

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