GO 学习之路 -5. 方法与接口
前言
本文来巩固 GO 语言方法与接口知识。
本文大纲
1、方法 Faction
GO 语言中方法是什么?在 GO 语言中,一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。
方法只是一个函数,带有一个特殊的接收器类型,处于 func 关键字和方法名之间。接收器可以是 struct 类型或非 struct 类型。接收者可以是值接收者,也可以是指针接收者。
调用方法时,值类型既可以调用值接收者的方法,也可以调用指针接收者的方法;指针类型既可以调用指针接收者的方法,也可以调用值接收者的方法。
定义方法的方式
方法和函数
Go 语言不是一种纯粹面向对象的编程语言,它不支持类。因而,类型的方法是一种实现类似于类行为的方法。
相同名称的方法可以在不同的类型上定义,而具有相同名称的函数是不允许的。
变量作用域
Go 语言的三种变量:
函数内定义的变量称为局部变量
函数外定义的变量称为全局变量
函数定义中的变量称为形式参数
2、接口 Interface
GO 语言中接口如何定义?
面向对象世界中的接口的一般定义是“接口定义对象的行为”。在 GO 语言中,接口是一组方法签名。当类型为接口中的所有方法提供定义时,它被称为实现接口。
定义接口的语法:
几点说明:
interface 可以被任意的对象实现
一个对象可以实现任意多个 interface
任意的类型都实现了空 interface(我们这样定义:interface{}),也就是包含 0 个 method 的 interface
接口的类型
先来看维基百科里对Duck Typing
(鸭子类型)的定义:
If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.
翻译过来就是:如果某个东西长得像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那它就可以被看成是一只鸭子。
Duck Typing
(鸭子类型),是动态编程语言的一种对象推断策略,它更关注对象能如何被使用,而不是对象的类型本身。Go 语言作为一门静态语言,它通过通过接口的方式完美支持鸭子类型。
Go 语言的多态性
Go 语言的多态性是在接口的帮助下实现的。
任何定义接口方法的类型都被称为隐式地实现该接口。类型接口的变量可以保存实现接口的任何值,接口的这个属性用于实现 Go 中的多态性。
版权声明: 本文为 InfoQ 作者【子不语Any】的原创文章。
原文链接:【http://xie.infoq.cn/article/9b532512abe3c91f4a923d41a】。文章转载请联系作者。
评论