版权声明:可以胡乱转载。 https://blog.csdn.net/hunyxv/article/details/85212060
go 语言方法与接口
go语言中没有类class的概念、没有对象object关键词、也没有继承(但可以使用组合来实现继承关系),但提供了接口的支持,可以使用接口来实现面向对象的一些特性。
在go语言中结构体struct和其他面向对象语言中的class有同样的地位。结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型。每个变量都叫做结构体的成员。
type user struct {
name string
email string
address address # 通过组合来关联 address
}
type address struct {
...
}
// 一个使用指针接受者实现的方法
function(u *user) notify(){
fmt.Printf("Sending user email to %s<%s>\n", u.name, u.email)
}
一个绑定了结构的函数就是一个 方法 ,该结构体着这里叫做接受者receiver,接受者可以是内置的类型也可以是自定义类型,也可以是类型指针。在方法中接受者就像C++中的this和Python中的self,但它是显式的声明其所属类型。
接口 Interface 是一组抽象方法(未具体实现的方法/仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类/对象就实现了该接口。
在上面代码的基础上添加:
// 定义一个接口类型
type notifier interface {
notify()
}
type user struct {
name string
email string
address address # 通过组合来关联 address
}
type address struct {
...
}
// 一个使用指针接受者实现的方法 实现了接口中的方法
function(u *user) notify(){
fmt.Printf("Sending user email to %s<%s>\n", u.name, u.email)
}
// main是应用程序的入口
func main(){
u := user{"XiaoMing", "[email protected]"}
sendNotification(&u)
}
// 该函数接受实现了 notifier 接口的值
func sendNotfication(n notifier){
n.notify()
}
参考: go语言学习-接口