这是我参与更文挑战的第4天,活动详情查看: 更文挑战
Go怎么实现动态匹配方法?
实现方法的动态匹配唯一的办法是通过接口interface实现。其余的在struct上或者具体的类型上的方法都是静态的。
concrete 具体的
为什么len是一个函数而不是一个方法?
我们辩论过这个问题,并最后决定把len实现为一个函数,认为这是一个比较好的实践,并却不会复杂化Go的interface(PS: 说了和没说一样。。)
Go为什么不支持重载方法和运算符?
如果不需要做类型匹配的话方法的调度会十分简单。其他语言的经验告诉我们,虽然一个同样名字的方法有着不同的函数签名实现偶尔会有帮助,但是同样会让人在使用的时候感到困惑。通过名字来匹配方法,保证类型的一致性是Go语言设计实现简洁化的重要决定。运算符的重载也是如此。
Go是面向对象设计的语言吗?
可以说是也可以说不是。虽然Go有类型和方法,并且允许面向对象风格的编码,但是Go没有类型分层结构。Go提供了interface的概念 ,我们认为使用很方便并且某种角度看更加统一。同样的Go可以做到在类型中内嵌其他类型,效果和子类一模一样。不仅如此,Go的方法比C++或者Java更加通用,因为它们能够被定义为任何数据类型(PS:也就是func (s *service) method()这种形式的方法),甚至是内置类型,比如未拆箱的Integer类型,并不是局限于Struct(Class)。
同样的缺少类型的分层结构,使得Go的对象会比Java或者C++更加轻量化。
hierarchy n 分层结构
embed 内嵌
analogous 相似的
general 通用的