面向接口编程
目录
如果你听说过面向对象编程,那么你很有可能也听说过面向接口编程。面向接口编程的核心思想是,只要你实现了这个方法,你就符合这个 接口。听起来有点玄乎,看个例子吧:
package main
import (
"fmt"
)
type Walker interface {
Walk()
}
type Animal struct {
}
func (a *Animal) Walk() {
fmt.Println("Animal walk")
}
type Duck struct {
Animal
Color string
}
func main() {
var x Walker = &Duck{}
x.Walk()
}
Go语言中不需要像Java那样显示的声明是否实现了某个接口,编译器会自动检测,如果实现了接口所要求的所有函数,那么这个实例就 符合该接口。
请注意,倒数第三行,为什么要写成 var x Walker = &Duck{}
而不是 var x Walker = Duck{}
呢?
正如上面所说,实现了 Walk
这个方法的类型,是 *Animal
,而不是 Animal
,因此,只有 *Animal
, *Duck
符合这个接口的定义,
Animal
和 Duck
却不符合。Go并没有在这种情况下帮我们做自动转换。
更多文章
本站热门
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- 用peewee代替SQLAlchemy
- frp 源码阅读与分析(一):流程和概念
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(一):runc和containerd
- Docker组件介绍(二):shim, docker-init和docker-proxy
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程