手记

Go 的奇妙旅程:Go 语言接口

接口是一组方法的集合,然后我们可以定义一个结构体实现该接口所有方法。也就是说,接口定义了对象的所有方法。
比如说,结构体 phone 可以 call_number 或 send_message。那么如果一个接口声明了 call_number 和 send_message 的方法,而 ipenguin 实现了这两个方法,那么 ipenguin 就实现了该接口。
接口的主要工作是仅提供由方法名称,输入参数和返回类型组成的方法签名集合。我们使用类型(例如 struct 结构体)来声明方法并实现它们。
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。

/* 定义接口 */
type phone interface {
   call_number
   send_message
}

/* 定义结构体 */
type ipenguin struct {
}

/* 实现接口方法 */
func (ipenguin ipenguin) call_number() call_number() {
    /* 建立通信连接 */
}
...
func (ipenguin ipenguin) send_message() send_message() {
   /* 发送短信 */
}

func main() {
    var p phone

    p = new(ipenguin)
    p.call_number()
}

在上面的例子中,我们定义了一个接口 phone,接口里面有一个方法 call_number() 与 send_message()。然后我们在 main 函数里面定义了一个 p 类型变量,并分别为之赋值为 ipenguin,然后我们调用了 call_number() 方法。
使用接口
接口会在需要传递不同类型的值的函数和方法的情况下非常有用 —— 就比如说接受所有类型的值的 Println 函数。
如果你去翻翻 Println 函数的源代码,那你会看到这个:
func Println(a …interface{}) (n int, err error)
复制代码
这其实就是一种可变函数!
当多个类型实现相同的接口时,我们能够使用相同的代码,非常简单实现兼容!因此,只要我们可以使用接口,我们就应该尽量使用它。

作者:Hoarfroster
链接:https://juejin.cn/post/6953229610708533262
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0人推荐
随时随地看视频
慕课网APP