Go语言_接口篇

简介:

在Go中,接口interface其实和其他语言的接口意思也没什么区别。interface理解其为一种类型的规范或者约定。一种类型是不是“实现”了一个接口呢?就看这种类型是不是实现了接口中定义的所有方法。

1 接口的定义和使用。

比如

1
2
3
4
5
type I  interface {
     Get()  int
     Put( int )
 
}

这段话就定义了一个接口,它包含两个函数Get和Put

 

好了,我的一个接口实现了这个接口:

1
2
3
4
5
6
7
8
type S  struct  {val  int }
func ( this  *S) Get  int  {
     return  this .val
}
func ( this  *S)Put(v  int ) {
     this .val = v
 
}

这个结构S就是实现了接口I

2 空接口

对于空接口interface{} 其实和泛型的概念很像。任何类型都实现了空接口。

下面举个例子:

一个函数实现这样的功能:

以任何对象作为参数,如果这个对象是实现了接口I,那么就调用接口I的Get方法

很多语言都是这样的逻辑:

1
2
3
4
5
6
function g(obj){
     if  (obj  is  I) {
         return  (I)obj.Get()
     }
 
}

Go中是这样实现的:

1
2
3
4
func g(any  interface {})  int  {
     return  any.(I).Get()
 
}

这里的any.(I)是不是很语义化?“任何实现了I接口的对象”

3 Go中interface的写法:

下面看几个interface的例子:

1
2
3
4
func SomeFunction(w  interface {Write( string )}){
     w.Write( "pizza" )
 
}

这个例子中,直接将interface定义在参数中,很特别…

 

1
2
3
4
5
6
func weirdFunc( i  int  interface {} {
   if  i ==  0 {
     return  "zero"
   }
   return  i;
}

这里例子中,由于有可能返回string,也有可能返回int,因此将返回值设置成为interface,这个在Go的package包中会大量见到。

目录
相关文章
|
7月前
|
自然语言处理 Go 索引
Go语言学习8-接口类型
【4月更文挑战第1天】本篇 Huazie 向大家介绍 Go 语言中的接口类型
45 2
Go语言学习8-接口类型
|
4月前
|
存储 设计模式 Go
深入理解Go语言的接口
【8月更文挑战第31天】
20 0
|
7月前
|
存储 Go 开发者
【Go语言专栏】深入探索Go语言的接口与多态
【4月更文挑战第30天】本文探讨了Go语言中的接口和多态性。接口是方法集合的抽象类型,允许不同类型的值实现相同的方法,实现多态。接口定义不包含实现,仅包含方法签名。类型实现接口是隐式的,只要实现了接口所需的方法。接口用于编写与具体类型无关的通用代码。通过接口,不同类型的对象可以响应相同消息,展现多态性。此外,接口可以嵌入以继承其他接口,类型断言则用于访问接口内部的具体类型。空接口可存储任何类型值。理解并掌握接口有助于编写更灵活、模块化的Go代码。
43 2
|
存储 安全 Go
Go语言空接口如此简单,原来可以这么玩!
Go语言空接口如此简单,原来可以这么玩!
165 0
|
7月前
|
安全 Go
接口在Go语言中的实现与应用
【2月更文挑战第19天】接口是Go语言中一种重要的抽象机制,它定义了一组方法的集合,而不关注具体的实现。本文将深入探讨Go语言中接口的实现方式、接口的应用场景以及接口在Go语言设计中的优势,帮助读者更好地理解和应用接口。
|
存储 Go C++
GO语言基础(下)
GO语言基础(下)
|
7月前
|
Go
go语言中的接口(二)
go语言中的接口
57 0
|
7月前
|
搜索推荐 Java Go
go语言中的接口(一)
go语言中的接口
43 0
|
7月前
|
自然语言处理 编译器 Go
GO语言中的方法
GO语言中的方法
49 0
|
自然语言处理 小程序 Java
Go语言基础
Go语言基础
101 0