首頁 >後端開發 >Golang >go語言函數介紹

go語言函數介紹

尚
轉載
2019-11-30 14:52:232251瀏覽

go語言函數介紹

Go函數和一些其他語言不一樣的地方

#1、函數格式不同

func GetMsg(i int) (r string) {
    fmt.Println(i)
    r = "hi"
    return r
 
}

func說明這個是個函數

GetMsg是函數名稱

(i int) 函數接收一個int參數

(r string) 函數傳回一個string型別回傳值

#2、函數可以回傳多個回傳值

這點和c,php都不一樣,和lua是一樣的

func GetMsg(i int) (r string, err string) {
    fmt.Println(i)
    r = "hi"
    err = "no err"
    return r,err
 
}

3、defer的使用

defer的意思是"在函數退出時呼叫",特別用於對檔案進行讀寫操作的時候,需要在open之後要呼叫close操作,將close操作使用defer

func ReadFile(filePath string)(){
    file.Open(filePath)
    defer file.Close()
     
    if true {
        file.Read()
    } else {
        return false
    }
 
}

這樣寫的意思是在file.Open後不立即調用close,當return false的時候調用file.Close().這樣就有效避免了C語言中的內存洩露問題。

4、比較難理解的:panic,recover和defer

#defer:建議:go defer(go延遲函數)介紹

Panic和Recover我們就將他們看成是其他語言中的throw和catch

#下面這個例子:

ackage main
 
import "fmt"
 
func main() {
    f()
    fmt.Println("Returned normally from f.")
}
 
func f() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
        }
    }()
    fmt.Println("Calling g.")
    g(0)
    fmt.Println("Returned normally from g.")
}
 
func g(i int) {
    if i > 3 {
        fmt.Println("Panicking!")
        panic(fmt.Sprintf("%v", i))
    }
    defer fmt.Println("Defer in g", i)
    fmt.Println("Printing in g", i)
    g(i + 1)
}

回傳了:

Calling g.
Printing in g 0
Printing in g 1
Printing in g 2
Printing in g 3
Panicking!
Defer in g 3
Defer in g 2
Defer in g 1
Defer in g 0
Recovered in f 4
Returned normally from f.

Panic拋出了信息,並且跳出函數。 Recover接受到了訊息,並且繼續處理。

推薦:go語言教學

以上是go語言函數介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除