本文實(shí)例講述了Go語言函數(shù)基本用法。分享給大家供大家參考,具體如下:
這里要說一下是Go函數(shù)和一些其他語言不一樣的地方
1 函數(shù)格式不同
復(fù)制代碼 代碼如下:
func GetMsg(i int) (r string) {
fmt.Println(i)
r = "hi"
return r
}
func說明這個(gè)是個(gè)函數(shù)
GetMsg是函數(shù)名
(i int) 函數(shù)接收一個(gè)int參數(shù)
(r string) 函數(shù)返回一個(gè)string類型返回值
2 函數(shù)可以返回多個(gè)返回值
這點(diǎn)和c,php都不一樣,和lua是一樣的
復(fù)制代碼 代碼如下:
func GetMsg(i int) (r string, err string) {
fmt.Println(i)
r = "hi"
err = "no err"
return r,err
}
3 defer的使用
defer的意思是"在函數(shù)退出時(shí)調(diào)用",特別用于對(duì)文件進(jìn)行讀寫操作的時(shí)候,需要在open之后要調(diào)用close操作,將close操作使用defer
復(fù)制代碼 代碼如下:
func ReadFile(filePath string)(){
file.Open(filePath)
defer file.Close()
if true {
file.Read()
} else {
return false
}
}
這樣寫的意思是在file.Open后不立即調(diào)用close,當(dāng)return false的時(shí)候調(diào)用file.Close().這樣就有效避免了C語言中的內(nèi)存泄露問題。
4 比較難理解的:panic,recover和defer
defer的作用前面說得很清楚了。
Panic和Recover我們就將他們看成是其他語言中的throw和catch
下面這個(gè)例子:
復(fù)制代碼 代碼如下:
package 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)
}
返回了:
復(fù)制代碼 代碼如下:
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拋出了信息,并且跳出函數(shù)。Recover接受到了信息,并且繼續(xù)處理。
這個(gè)例子理解了基本就掌握了Recover和Panic
希望本文所述對(duì)大家Go語言程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- Go語言中的Slice學(xué)習(xí)總結(jié)
- GO 語言學(xué)習(xí)指南
- Go語言學(xué)習(xí)筆記之反射用法詳解
- Go語言基礎(chǔ)學(xué)習(xí)教程
- Go語言學(xué)習(xí)教程之聲明語法(譯)
- golang新手不注意可能會(huì)出現(xiàn)的一些小問題