golang 基礎知識2

2022-05-18 23:06:14 字數 1654 閱讀 4752

1.defer panic recover

defer : golang的defer優雅又簡潔, 是golang的亮點之一。defer在宣告時不會立即執行,而是在函式return後,再按照先進後出的原則依次執行每個defer,一般用於釋放資源、清理資料、記錄日誌、異常處理等。

defer定義的內容必須在return之間就寫上,否則就不會defer了

f, err := os.open("file")

defer f.close()
if err != nil

b, err := ioutil.readall(f) 

println(string(b))

defer的智行順序:結果是one,two,three從下向上一次執行

func defertest(number int) int ()

defer func() ()

defer func() ()

return number

}

2.go async.waitgroup,它能夠一直等到所有的goroutine執行完成,並且阻塞主線程的執行,直到所有的goroutine執行完成。

waitgroup總共有三個方法:add(delta int),done(),wait()。

add:新增或者減少等待goroutine的數量

done:相當於add(-1)

wait:執行阻塞,直到所有的waitgroup數量變成0

var waitgroup sync.waitgroup //定義乙個同步等待的組

也可以這樣生成:

waitgroup:= &sync.waitgroup{}
waitgroup.add(1) //新增乙個計數

go function() {} //執行任務

waitgroup.wait() //阻塞直到所有任務完成

package main

import (

"fmt"

"sync"

"time"

)func main() (i)

} wg.wait()

}func echonumber(i int)

程式很簡單,只是將每次迴圈的數量過3秒鐘輸出。那麼,這個程式如果不用waitgroup,那麼將看不見輸出結果。因為goroutine還沒執行完,主線程已經執行完畢。注釋的defer wg.done()和defer wg.add(-1)作用一樣。這個很好,原來執行指令碼,都是使用time.sleep,用乙個估計的時間等到子執行緒執行完。waitgroup很好。雖然chanel也能實現,但是覺得如果涉及不到子執行緒與主線程資料同步,這個感覺不錯。

備註:

golang基礎知識總結

繼承通過結構體中的匿名字段實現,示例如下,add和sub引用了basenum結構體,所以add和sub是basenum的子類。type add struct type sub struct type basenum struct如果乙個struct巢狀了另乙個匿名結構體,那麼這個結構可以直接訪問匿名...

Golang基礎知識 十安辰

sdk就是軟體開發工具包。做go開發之前,我們需要先安裝配置好sdk 編寫 就是敲 編譯 go build 原始碼檔案 生成.exe二進位制可執行檔案 執行 1 對於可執行檔案執行 exe 2 對於原始碼 go run 原始碼檔案 這種方式可以一步執行,但是寫大型專案時候速度較慢,不推薦,一般只用於...

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...