golang语法总结(二十二):接口interface

  • 类型关键字为interface
  • 不需要显式声明实现某个接口,只要实现相关方法就实现了接口
    基本示例:
   
   
type Person interface {
Name() string
}
type Student struct {
name string
}
func (s Student)Name() string {
return s.name
}
func main() {
var p Person
p = Student{name:"roc"}
fmt.Println(p.Name()) //roc
}
  • 接口也可以组合(相当于继承)
  • 可以试探是否为某个struct或interface的实例(ok pattern),相当于Java中的instanceof
    
    
type Person interface {
Name() string
}
type Teacher interface {
Person //接口组合
Teach()
}
type MyTeacher struct {
name string
class string
}
func (t MyTeacher)Name() string {
return t.name
}
func (t MyTeacher)Teach() {
fmt.Println("I am teaching ",t.class)
}
func say_hello(p Person) {
if m,ok := p.(MyTeacher);ok { //看此Person是否为MyTeacher的实例,如果是再执行if内的内容
fmt.Println("hello ",m.name)
}
}
func main() {
var t Teacher = MyTeacher{
name : "roc",
class : "english",
}
fmt.Println(t.Name()) //roc
t.Teach() //I am teaching english
say_hello(t) //hello roc
}
  • 可以使用匿名接口
     
     
var a interface{
Name() string
}

  • 空接口可以看作是所有struct都实现了的。匿名空接口直接写成:interface{}
  • type switch可以判断某变量是哪种类型,并根据不同类型作不同处理
     
     
type A struct {
a string
}
type B struct {
b string
}
func say_hello(m interface{}) {
switch t := m.(type) { //type switch的关键
case A:
fmt.Println("hello ",t.a)
case B:
fmt.Println("hello ",t.b)
default:
fmt.Println("nobody")
}
}
func main() {
a := A{a:"a"}
b := B{b:"b"}
say_hello(a) //hello a
say_hello(b) //hello b
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值