• Golang--函数签名相同


    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)
    }
    
    必须函数签名相同(函数名,参数和返回值(类型,个数,顺序)都相同),否则会转换失败,无法实现该接口。
  • 相关阅读:
    Java Web idea Filter配置(过滤器配置)
    JAVA中一些定时器的使用
    数据库事务的四大特性
    SQL语句中----删除表数据drop、truncate和delete的用法
    什么是索引?Mysql目前主要的几种索引类型
    MySQL练习题
    测试6--模拟两人在对话1000次
    实验室每日一题WP-12月7日
    实验室每日一题WP-12月5日
    实验室每日一题WP-12月4日
  • 原文地址:https://www.cnblogs.com/l1ng14/p/14164419.html
Copyright © 2020-2023  润新知