Go语言-接口

接口(interface)的定义

接口代表一种调用契约,是多个方法声明的集合。接口要实现的是做什么,而不关心如何做。接口最常见的使用场景是对包外提供访问,或预留扩展空间。
Go语言接口实现机制很简洁,只要目标类型方法集内包含接口声明的全部方法,就被视为实现了该接口,无需做显示声明,当然目标类型可实现多个接口。
其实接口也是一中结构,只是编译器会对其做出很多限制:
- 不能有字段
- 不能定义自己的方法
- 只能声明方法,不能实现
- 可嵌入其它接口类型
接口通常以er作为后缀,方法名是声明组成部分,但参数名可不同或省略。

package main
import(
    "fmt"
)
type tester interface{   //方法
    test()
    string() string
}

type data struct{}
func (*data)test(){}
func (data)string()string{
    return "Hello word"
}
func main(){
    var d data
    var t tester = &d
    t.test()
    fmt.Println(t.string())
}

如果接口没有任何方法声明,那么它就是一个空接口(interface{}),它的用途非常广泛可被赋值为任何类型的对象。接口变量默认值时nil,如果实现接口的类型支持可做相等运算。

package main
import(
    "fmt"
)

func main(){
    var a,b interface{}
    fmt.Println(a == nil,a == b)
    a,b = 10,10
    fmt.Println(a == b)
}

输出:
true true
true
可以像匿名字段那样嵌入其它接口。目标类型方法集中必须拥有包含嵌入接口方法在内的全部方法才算实现了该接口。嵌入其它接口类型相当于将其声明的方法集导入。这就要去不能有同名方法,因为不支持重载。不能嵌入自身或循环嵌入这样会导致递归错误。接口可直接用于变量定义,或作为结构字段类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值