面向接口编程

目录

如果你听说过面向对象编程,那么你很有可能也听说过面向接口编程。面向接口编程的核心思想是,只要你实现了这个方法,你就符合这个 接口。听起来有点玄乎,看个例子吧:

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 符合这个接口的定义, AnimalDuck 却不符合。Go并没有在这种情况下帮我们做自动转换。



更多文章
  • Golang log 源码阅读
  • 使用Go语言实现一个异步任务框架
  • Golang flag源码阅读及自己实现
  • Go使用gdb调试
  • Golang ASM简明教程
  • Golang context源码阅读与分析
  • Golang中的并发控制
  • 善用闭包(closure)让Go代码更优雅
  • Golang的可选参数实践
  • FreeBSD ipfw使用教程
  • Golang expvar库源码阅读
  • Golang SQL生成库 Squirrel 教程及源码阅读
  • Golang validator使用教程
  • 使用Redis的Stream模块实现群聊功能
  • 价值编程与职业发展