Golang–函数签名相同
条件
必须函数的函数名,参数和返回值(类型,个数,顺序)都相同。
验证
例子:
定义函数类型,让相同签名的函数自动实现某个接口。
Negtive
:
package interfaceTestimport (\"fmt\"\"testing\")type IntString interface {test(a int ,s string) (int ,string)}type likeIntString func(s string ,i int) (int ,string)func (i likeIntString) testaaa(ii int, s string) (int, string) {return i(s, ii)}func TestInterface(t *testing.T){var tt IntString = likeIntString(func(s string, i int) (int, string) {return i,s})i, s := tt.testaaa(7, \"dfdf\")fmt.Println(i,s)}
# Go_test/src/interface/interfaceTest [Go_test/src/interface/interfaceTest.test]
.\\interface_test.go:21:6: cannot use likeIntString(func literal) (type likeIntString) as type IntString in assignment:
likeIntString does not implement IntString (missing test method)
.\\interface_test.go:25:12: tt.testaaa undefined (type IntString has no field or method testaaa)
Postive
package interfaceTestimport (\"fmt\"\"testing\")type IntString interface {test(a int ,s string) (int ,string)}type likeIntString func(s string ,i int) (int ,string)func (i likeIntString) test(ii int, s string) (int, string) {return i(s, ii)}func TestInterface(t *testing.T){var tt IntString = likeIntString(func(s string, i int) (int, string) {return i,s})i, s := tt.test(7, \"dfdf\")fmt.Println(i,s)}