Interfaces and Duck Typing in Go
If it looks like a duck and quacks like a duck, it’s a duck
Interfaces and Duck Typing in Go
if it looks like a duck and quacks like a duck, it’s a duck 當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱為鴨子
source: https://theburningmonk.com/2015/05/why-i-like-golang-interfaces/
意思就是: 一個東西究竟是不是鴨子,取決於它能不能滿足鴨子的工作。
duck typing
多出現在動態語言, 例如PHP, Python, JavaScript, Ruby 等.
在靜態語言中比較罕見,但是在go中duck typing處處都是duck typing.
Go isn’t object oriented in the typical sense
更多解釋可以看這 Is go duck-typed?
go的 interface{}
和 duck typing 密不可分. 後面會有 example 來實現.
Duck Typing
duck typing 描述事物的外部行為而非內部結構 在物件導向(Object-oriented programming, OOP)的編程語言中,當某個地方(比如某個函數的參數)需要符合某個條件的變量(比如要求這個變量實現了某種方法)時,什麼是判斷這個變量是否"符合條件"的標準? 如果某種語言在這種情況下的標準是: 這個變量的類型是否實現了這個要求的方法(並不要求顯式地聲明),那麼這種語言的類型系統就可以稱為duck typing duck typing是動態類型的一種風格。在這種風格中,一個對象有效的語義,不是由繼承自特定的類或實現特定的接口,而是由"當前方法和屬性的集合"決定。 誰調用誰實現,比如你要調用一個A函數,而A函數中接收參數的同時調用了參數中的B方法.這時候你就要傳進去一個具有B方法名的一個對象.
Go interface
Understanding Interfaces in Go
Example
Python : duck-typing-in-python/
|
|