概述
我們将用幾節來學習Go語言基礎,本文結構如下:
函數
-多值傳回
-可命名結果形參
-Defer
複制
函數
函數的基本語句結構:
func DoSome(a int ) string{
return "do"
}
複制
- func 是關鍵字,表示函數的開始。
- 參數的寫法是 變量名在前,類型在後。
- 傳回值寫在函數的參數的括号後面,上面的例子傳回值是 string
多值傳回
函數和方法可傳回多個值:
func Write(b []byte) (int, error)
複制
上面的傳回值,聲明傳回的是 int, error 這兩個值。在一些需要傳回錯誤資訊的情況下會非常有用。
調用時,可以這麼使用:
r,e := Write()
使用 空白辨別符可以忽略第二個參數:
r,_ := Write()
可命名結果形參
函數的傳回值可被命名,并作為正常變量使用,就像傳入的形參一樣。 比如:
func nextInt(b []byte, pos int) (value, nextPos int) {
複制
命名後,一旦該函數開始執行,它們就會被初始化為與其類型相應的零值;
若該函數執行了一條不帶實參的 return 語句,則結果形參的目前值将被傳回。
一個示例:
func ReadFull(r Reader, buf []byte) (n int, err error) {
for len(buf) > 0 && err == nil {
var nr int
nr, err = r.Read(buf)
n += nr
buf = buf[nr:]
}
return
}
複制
Defer
defer 語句用于 預先認為某個函數被調用。也可了解為 推遲執行函數。被 defer 的 函數會在執行 defer 所屬于的函數傳回之前 “立即執行"。
例如無論以何種路徑傳回,都必須釋放資源的函數。 典型的例子就是關閉檔案:
func Contents(filename string) (string, error) {
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close() // f.Close 會在我們結束後運作。
複制