深度解密Go语言之关于 interface 的10个问题

2020-07-09 00:00:00 函数 接口 方法 类型 接收者

这次文章依然很长,基本上涵盖了 interface 的方方面面,有例子,有源码分析,有汇编分析,前前后后写了 20 多天。洋洋洒洒,长篇大论,依然有些东西没有涉及到,比如文章里没有写到反射,当然,后面会单独写一篇关于反射的文章,这是后话。

还是希望看你在看完文章后能有所收获,有任何问题或意见建议,欢迎在文章后面留言。

这篇文章的架构比较简单,直接抛出 10 个问题,一一解答。

1. Go 语言与鸭子类型的关系

先直接来看维基百科里的定义:

If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.

翻译过来就是:如果某个东西长得像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那它就可以被看成是一只鸭子。

Duck Typing,鸭子类型,是动态编程语言的一种对象推断策略,它更关注对象能如何被使用,而不是对象的类型本身。Go 语言作为一门静态语言,它通过通过接口的方式完美支持鸭子类型。

例如,在动态语言 python 中,定义一个这样的函数:

def hello_world(coder):
    coder.say_hello()

相关文章