面向接口编程

目录

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

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并没有在这种情况下帮我们做自动转换。



更多文章
  • Google Ads使用体验
  • Go的custom import path
  • 如何挖掘二级子域名?
  • Go Module 简明教程
  • 写了一个Telegram Bot:自动化分享高质量内容
  • ArchLinux 怎么降级 package ?
  • Vim打开很慢,怎么找出最慢的插件?怎么解决?
  • 为什么我选择放弃运营微信公众号?
  • Web后端工程师进阶指南(2018)
  • How to implement fork syscall in Golang?
  • macOS ansible 遇到 rsync: --chown=www-data: unknown option
  • 关于运营的思考-运营要怎么做?
  • Python中实现单例模式的n种方式和原理
  • Golang defer中修改返回值
  • Python dataclass 源码阅读与分析