Golang中的defer關鍵字和陣列

2022-10-10 17:57:12 字數 1389 閱讀 3739

一、defer關鍵字

1.defer關鍵字定義了在當前函式生命週期結束之前觸發的一種機制,類似於c++中的析構函式,j**a中的final關鍵字。如在main函式中定義: defer fmt.println("end"),表示會在main函式結束前輸出end。

2.defer可在同一函式體中定義多個,執行順序類似壓棧,後定義的defer語句先執行。

3.當同一函式體中同時出現defer語句和return語句時,return語句會先於defer語句執行。

二、固定長度陣列

1.定義長度固定的陣列,如:var arr [10] int;獲取陣列的長度,使用len函式,即len(arr)。

2.定義長度固定的陣列,且初始化,如:arr := [10] int 。

3.使用for迴圈遍歷陣列,如:for i := 1; i < len(arr); i++;或者:for index, value := range arr(不關心index或value中某一值時,將其設定為匿名「_」)。

4.固定長度陣列作為函式引數傳參,引數需規定陣列的資料型別和長度,視為同一型別的陣列。(值拷貝過程,而非改變原陣列)

三、動態陣列(slice切片)

1.slice的宣告方式:

(1)宣告並初始化預設值:slice := int。

(2)宣告但不分配空間:slice := int。此時使用其中元素會報錯,需要開闢空間:slice = make(int, 3)。

(3)組合:var slice int = make(int, 3)。

(4)判斷乙個切片是否為空:if slice == nil。

2.切片作為函式引數傳參,引數只需規定陣列的資料型別。(非值拷貝過程,而是傳遞了陣列的引用,值可以修改)

3.切片容量的追加操作:

(1)在make(開闢)切片空間時可以同時追加乙個引數作為切片的容量,如var slice int = make(int, 3, 5),代表切片長度為3,容量為5,並通過cap(slice)獲取到切片的容量。

4. 切片的擷取:模擬python,或j**a字串中的substring函式,如s[0:2]代表取出切片的第乙個元素和第二個元素。表示方法:

(1)s := str[:]表示取全部,即s是切片str的引用。

(2)s := str[startindex:]表示取str中索引startindex到最後的切片。

(3)s := str[:endindex]表示取str中開始到索引endindex的切片。

(4)s := str[startindex:endindex]表示從startindex到endindex的切片。

注意:s和str本質指向的同乙個切片,若想指向不同切片,可以使用copy函式,將切片完全拷貝。如:s2 := make(int, 3),copy(s2, s)可以把s的值完全拷貝到s2中。

Golang中的defer使用

在golang當中,defer 塊會在函式呼叫鍊錶中增加乙個函式呼叫。這個函式呼叫不是普通的函式呼叫,而是會在函式正常返回,也就是return之後新增乙個函式呼叫。因此,defer通常用來釋放函式內部變數。為了更好的學習defer的行為,我們首先來看下面一段 func copyfile dstnam...

golang中defer和recover函式

defer語句是用來延遲執行 的,意思就是在執行一段 的時候,只有執行完畢那一時間,才會執行defer語句。而且在遇見多個defer的時候,最開始的defer會是最後乙個執行,可以通過以下 看出來 package main import fmt func main defer fmt.println...

golang中defer使用小結

golang語言中defer的使用場景較多,用於鎖的關閉,連線的延遲關閉等,通常在函式的結束時呼叫,詳細的講就是在函式結束時返回值賦值後,返回前執行defer的方法,最後才返回,另外defer確實有一定的開銷,拒絕濫用。第一點 defer 不帶函式執行,defer可以理解像棧,先進後出,看下面 fu...