go語言 介面的思考(一)

2021-06-17 20:36:03 字數 1313 閱讀 3607

在《學習go語言》中,有乙個例子,說得是怎樣做乙個通用的介面來實現給數字,字串來排序。

第一種思路:

1. 定義乙個函式,可以接收任意型別做為入參,然後

在函式內,根據入參來判斷是那乙個型別

func sort(i inte***ce{})

} 在呼叫時,sort(int) 我們傳入了乙個陣列,

很不幸,go不能(隱式)轉換為slice。

所以上述方法行不通。

換種思路:

1. 先定義乙個介面sorter,這個介面中包含了方法列表

即使是沒有具體實現這個方法,這個介面也是合法的。

2. 定義乙個函式sort

入參是sorter型別。 介面也是一種型別,所以可以做為入參。

3. go語言中,只要某個型別實現了介面中的所有方法,就算是實現了該介面

因此,我們先定義乙個xi int 型別,如果這個xi實現了介面中所有的方法,則實現了該介面

這樣我們在設計的時候,只要實現介面,而不要需要關心具體的是哪個型別來排序。

如果後期要增加某個型別的排序,只要定義乙個型別,並且實現介面中的方法就可以了,不用關心,

sorter排序的細節。

package main

import (
"fmt"
)
type sorter inte***ce
type xi int
type xs string
func (p xi) len() int
func (p xi) less(i int, j int) bool
func (p xi) swap(i int, j int)
func (p xs) len() int
func (p xs) less(i int, j int) bool
func (p xs) swap(i int, j int)
func sort(x sorter)
}
}
}
func main()
strings := xs
sort(ints)
fmt.printf("%v\n", ints)
sort(strings)
fmt.printf("%v\n", strings)
}

輸出結果:

[3 8 9 10 14 17 44 67 73 89]

[ape elephant go nut zoo]

關於介面的思考

1 介面的意義 以前一直在思考的是介面的意義是什麼,我們定義乙個類,如果繼承了介面,就需要實現介面的全部方法和屬性,欄位等,那麼為什麼要繼承介面,直接定義我們想要的類就好了,後來隨著接觸的增多,再加上網上搜尋的一些資料,漸漸體會到介面的誕生是乙個很偉大的發明 1 介面可以定義規範,指的是我們在介面中...

Go語言 通俗理解介面的概念

更新 根據實際開發理解介面 給乙個服務端的場景吧 有不同的伺服器組成的後端,登入註冊服,gateway服,處理邏輯的伺服器,他們都需要在鏈結前啟動,向乙個統一的伺服器發現的伺服器註冊自己 以便宕機改變訊息的 路徑 那麼他們的run 方法可以定義在乙個介面中,實現用同乙份啟動 實現不同服的初始化。這是...

關於介面的一些思考

下面示例是模擬遊戲 憤怒的小鳥 的實現。叫的方式的介面 public inte ce shouttype 嗷嗷叫 public class aoshout implements shouttype 喳喳叫 public class zhashout implements shouttype 鳥的抽象...