Maison >développement back-end >Golang >Interface avec contraintes de type pour les méthodes en tant que fonctions génériques

Interface avec contraintes de type pour les méthodes en tant que fonctions génériques

王林
王林avant
2024-02-06 09:45:11981parcourir

Interface avec contraintes de type pour les méthodes en tant que fonctions génériques

Contenu de la question

J'essaie d'utiliser des génériques lors de l'écriture d'une fonction d'assertion pour tester des choses, mais cela me donne une erreur some does not implement testutilt (wrong type for method equals...) erreur. Si oui, comment puis-je faire fonctionner le code ci-dessous ?

package test_util

import (
    "fmt"
    "testing"
)

type TestUtilT interface {
    Equals(TestUtilT) bool
    String() string
}

func Assert[U TestUtilT](t *testing.T, location string, must, is U) {
    if !is.Equals(must) {
        t.Fatalf("%s expected: %s got: %s\n",
            fmt.Sprintf("[%s]", location),
            must,
            is,
        )
    }
}

type Some struct {
}

func (s *Some) Equals(other Some) bool {
    return true
}

func (s *Some) String() string {
    return ""
}

func TestFunc(t *testing.T) {
    Assert[Some](t, "", Some{}, Some{}) 
    // Error: "Some does not implement TestUtilT (wrong type for method Equals...)"

}

bonne réponse


remplacement

func (s *some) equals(other some) bool {

et

func (s *some) equals(other testutilt) bool {

Puis remplacez

assert[some](t, "", some{}, some{})

et

Assert[Some](t, "", &Some{}, &Some{})

La première modification corrigera votre message d'erreur initial, mais sans la deuxième modification, votre code ne fonctionnera toujours pas.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer