Maison > développement back-end > Golang > Pourquoi Go n'autorise-t-il pas le passage de `func(int)` à `func(interface{})` malgré que `int` satisfasse `interface{}` ?

Pourquoi Go n'autorise-t-il pas le passage de `func(int)` à `func(interface{})` malgré que `int` satisfasse `interface{}` ?

Barbara Streisand
Libérer: 2024-12-29 18:41:11
original
631 Les gens l'ont consulté

Why Doesn't Go Allow Passing `func(int)` to `func(interface{})` Despite `int` Satisfying `interface{}`?

Type func avec erreur d'incompatibilité des paramètres d'interface

Dans Go, déclarer une fonction de type pour accepter toute valeur conforme à interface{} semble simple. Cependant, invoquer une fonction passée en argument qui adhère à cette spécification de type génère une erreur.

Cette erreur découle du concept de variance de type, en particulier du manque de covariance dans les interfaces de Go. Bien qu'un entier (int) puisse être transmis à une fonction attendant une interface{}, le même principe ne s'applique pas aux fonctions.

Plus précisément, func(int) et func(interface{}) ne sont pas des types compatibles. . Même si int est conforme à interface{}, func(int) n'est pas conforme à func(interface{}). En effet, les interfaces dans Go sont invariantes.

Pour résoudre ce problème, envisagez de passer func(int) à une fonction attendant une interface{}, comme démontré dans l'exemple suivant :

package main

import "fmt"

type myfunc interface{}

func foo(x interface{}) {
    fmt.Println("foo", x)
}

func add2(n int) int {
    return n + 2
}

func main() {
    foo(add2)
}
Copier après la connexion

Dans cet exemple, func(int)int implémente interface{}, évitant ainsi l'erreur d'incompatibilité de type.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal