Go Interface介紹

Chung-chun Lo
Skyler Record
Published in
2 min readJun 30, 2019

在剛開始寫 Go 的時候對於 Interface 的用法大家可能會有點不熟悉,所以在這裡稍微跟大家介紹一下。

在 Go 裡面 Interface 的用法大致上有兩種,一種可以把它視為是變數型態的一種,這種型態就如同在 JS 裡面的 Object 一樣,可以放入任何的資料 : int 、 string 、 bool 等等。

讓你可以彈性的接收需要的數據,用法如下

就如同範例所示,你想丟什麼類型的數值進 Interface 都可以。

但是我個人是不建議濫用 Interface 這種資料型態雖然看起來很方便,但是對於巢狀或是結構較複雜的資料,在型態轉換或是取值上可是會受不少苦頭。

Interface 的另一種用途就如同字面上的意思,相信寫過OO的人都對 Interface 相當熟習不過 Go 的 Interface 並不用像 Java 一樣特別標示 Implement 等關鍵字。

只需實做出他應有的 Function 就會被認定是此 Interface 講了那麼多還是有點模糊,不如直接看範例

在這裡我分別建立了 dog 跟 bird 兩種變數但沒想到他們都可以丟到 function show() 裡面,主要原因就是因為我實做了 Animal 的 Function ,所以這兩個變數也被定義為是 Animal 。

就像剛才所說 Go 只要有實做所規範的 Function 就會被認定該 Interface 的類型,不需要在額外用關鍵字來定義。

這種使用方式不管是別人接你的 Package 或是 你要去接別人的 Package 只要 Input/Output 參數正確就沒問題了,甚至是在測試或抽換特定功能時都很實用。

不過真正的奧妙還是要自己實做之後才會慢慢體會,就連我也是最近在重新改 Code 跟寫測試得時候才開始了解為何 GitHub 上面有名的 Package 都要這樣寫。

--

--