大黄鸭是鸭子吗?
★传统类型系统:脊索动物门,脊椎动物亚门,鸟纲雁形目...

★duck typing:是鸭子
★“像鸭子走路,像鸭子叫(长得像鸭子),那么就是鸭子”

★描述事物的外部行为而非内部结构

★严格说go属于结构化类型系统,类似duck typing
python中的duck typing
def download(retriever):
return retriever.get("www.dusing.top")

★运行时才知道传入的retriever有没有get

★ 需要注释来说明接口
C ++ 中的duck typing
template <class R>
string download(const R& retriever) {
return retriever.get("www.dusing.top");
}

★编译时才知道传入的retriever有没有get

★ 需要注释来说明接口
java中类似的代码
<R extends Retriever>
string download(R r){
return r.get("www.dusing.top");
}

★ 传入的参数必须实现Retriever接口

★不是duck typing
go语言的duck typing
★同时需要Readable, Appendable怎么办?(apache polygene)

★同时具有python, C++ 的灵活性

★ 又具有java的类型检查