您好,登錄后才能下訂單哦!
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語言函數介紹的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。