"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Raisons de l'échec de l'alias de type GO

Raisons de l'échec de l'alias de type GO

Publié le 2025-04-12
Parcourir:988

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

Comment lancer à un type d'alias dans go?

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.

explication

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.

bonus

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.

Dernier tutoriel Plus>

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