【Go】Go語言學習筆記-2-函式

poemqiong發表於2019-02-16

函式是構建程式的基礎部件,定義如下:
type mytype int
func (p mytype) funcname(q int) (r, s int) {return 0,0}

  • 關鍵字func用於定義一個函式

  • 函式可以繫結到特定的型別上,叫做“接收者”,以後會詳細介紹。

  • funcname是自己定義的函式名稱

  • int型別的變數p是輸入引數,傳值引用,會被複制。

  • r和s是這個函式的 命名返回值,可以只有型別,也可以沒有返回值。

  • 函式體只有一個return語句,返回兩個值

1. 作用域

定義在函式外部的變數是全域性變數,定義在函式內部的變數是區域性變數。如果命名覆蓋-一個區域性變數與一個全域性變數有相同的名字,那麼在該函式執行的時候,區域性變數會覆蓋全域性變數。

2. 多值返回

Go的函式和方法可以返回多個值,元組沒有座位原生型別出現,所以多返回值可能是最佳的選擇。

3. 命名返回值

Go的格言:用更少的程式碼做更多的事。

  • 函式的返回值可以指定一個名字,並且像原始的變數那樣使用,就像輸入引數一樣。

  • 如果對其命名,在函式開始時,會用其型別的零值初始化。

  • 名字不是強制的。

4. 延遲程式碼

在defer後指定的函式會在函式退出前呼叫。

  • 延遲的函式是按照先進後出FILO的順序執行。

  • 利用defer甚至可以修改返回值。

5. 變參

接受不定數量的引數的函式叫做變參函式,例如:
func myfunc(arg …int) {}
變數arg是一個int型別的slice,這些引數的型別全部都是int。

6. 函式作為值

函式可以賦值給變數,可以在其他地方被呼叫。

7. 回撥

函式作為引數可以在另外一個函式裡被呼叫。

8. 恐慌和恢復

Panic:是一個內建函式,可以中斷原有的控制流程,進入一個令人恐慌的流程中,但函式F呼叫panic,函式F的執行被中斷,並且F中的延遲函式會正常執行,然後F返回到呼叫它的地方。在呼叫的地方,F的行為就像呼叫了panic。這一過程繼續向上,直到程式崩潰時所有goroutine返回。

Recover:是一個內建函式,可以讓進入令人恐慌的流程中得gorountine恢復過來。recover僅在延遲函式中有效。在正常的執行過程中,呼叫recover會返回nil並且沒有其他任何效果。如果當前的gorountine陷入恐慌,呼叫recover可以捕獲到panic的輸入值,並且恢復正常的執行。

本文僅記錄了一些自認為比較重要的資訊,原書中有許多程式碼的例子和講解,更為詳細。

相關文章