Saya cuba menggunakan generik semasa menulis fungsi penegasan untuk menguji sesuatu, tetapi ia memberi saya ralat some does not implement testutilt (wrong type for method equals...)
. Jika ya bagaimana saya boleh membuat kod di bawah berfungsi?
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...)" }
pengganti
func (s *some) equals(other some) bool {
dan
func (s *some) equals(other testutilt) bool {
Kemudian gantikan
assert[some](t, "", some{}, some{})
dan
Assert[Some](t, "", &Some{}, &Some{})
Perubahan pertama akan membetulkan mesej ralat awal anda, tetapi tanpa perubahan kedua kod anda masih tidak akan berfungsi.
Atas ialah kandungan terperinci Antara muka dengan kekangan jenis untuk kaedah sebagai fungsi generik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!