Golang–函数签名相同

条件

必须函数的函数名,参数和返回值(类型,个数,顺序)都相同

验证

例子:

定义函数类型,让相同签名的函数自动实现某个接口。

Negtive:

package interfaceTest

import (
	"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 interfaceTest

import (
	"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)
}
必须函数签名相同(函数名,参数和返回值(类型,个数,顺序)都相同),否则会转换失败,无法实现该接口。

版权声明:本文为l1ng14原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/l1ng14/p/14164419.html