Go 分布式學習利器(10) Go語言的介面

2021-10-10 16:12:53 字數 2254 閱讀 7828

在上一節中我們討論go語言的物件導向特性的時候也說了,go語言並不支援繼承,能夠進行物件的封裝(包括資料成員和成員函式的封裝),那麼這裡簡單說一下go語言介面之間的依賴關係。

我們知道 c++中兩個介面之間的依賴 可以通過公有/私有繼承方式來實現,且有對應的標識關鍵字

class programmar

;class cxxprogrammar : public programmar

;std:

:string cxxprogrammar:

:writehelloworld()

在go語言中的 介面之間的依賴關係則相比於以上語言有一些差異,先看乙個宣告的案例

type programmer inte***ce

type goprogrammer struct

func

(p *goprogrammer)

writehelloworld()

string

以上go語言的案例測試**如下:

package inte***ce_test

import

("testing"

)type programmer inte***ce

type goprogrammer struct

func

(p *goprogrammer)

writehelloworld()

string

func

testinte***ce

(t *testing.t)

最終如上測試**的輸出:

==

= run testinte***ce

inte***ce_test.go:25: fmt.println(

"hello world!"

)--- pass: testinte***ce (0.00s)

綜上總結,go語言的介面和其他語言的主要差異如下:

同時go 語言也提供了介面變數:

其中 coder 表示是乙個介面,goprogrammar表示其實現。

自定義型別,尤其是函式型別能夠一定程度降低**的複雜度,讓**更易讀。

如下,未新增自定義函式型別

// 計時函式 -- 計算乙個函式的執行耗時

func

calctimespent

(inner func

(op int

)int

)func

(op int

)int

}

可以看到函式定義部分很難區分函式的邏輯,而我們增加了自定義函式型別之後:

type intcov func

(op int

)int

// 自定義函式型別,簡化函式邏輯

func

calctimespent

(inner intcov) intcov

}

可以看到定義的函式開頭部分複雜度立即降低。

完成的 統計函式耗時測試**如下:

package inte***ce_test

import

("testing"

"time"

"fmt"

)type intcov func

(op int

)int

// 自定義函式型別,簡化函式邏輯

func

calctimespent

(inner intcov) intcov

}func

slowtest

(op int

)int

func

testspenttime

(t *testing.t)

輸出如下:

==

= run testspenttime

time spent : 1.000234077

inte***ce_test.go:47: 10

--- pass: testspenttime (1.00s)

10 Go 語言函式

函式是基本的 塊,用於執行乙個任務。go 語言最少有個 main 函式。你可以通過函式來劃分不同功能,邏輯上每個函式執行的是指定的任務。函式宣告告訴了編譯器函式的名稱,返回型別,和引數。go 語言標準庫提供了多種可動用的內建的函式。例如,len 函式可以接受不同型別引數並返回該型別的長度。如果我們傳...

GO學習 10 Go語言基礎之指標

區別於c c 中的指標,go語言中的指標不能進行偏移和運算,是安全指標。任何程式資料載入記憶體後,在記憶體都有他們的位址,這就是指標。而為了儲存乙個資料在記憶體中的位址,我們就需要指標變數。比如,永遠不要高估自己 這句話是我的座右銘,我想把它寫入程式中,程式一啟動這句話是要載入到記憶體 假設記憶體位...

Go語言分布式網路爬蟲(1)

我們的爬蟲主體框架思路如下 這一小節的主要內容是對我們之前編寫的 進行一些簡單的封裝,並且編寫部分engine和parser的 下面的總體的結構圖 我們首先將之前main中的業務邏輯封裝到fetch函式中,我們需要建立乙個新的包fetcher 接著我們就要開始編寫engine,首先建立乙個engin...