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...)" }
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!