Go函數(shù)和一些其他語(yǔ)言不一樣的地方
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)云浮免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。1、函數(shù)格式不同
func GetMsg(i int) (r string) { fmt.Println(i) r = "hi" return r }
func說(shuō)明這個(gè)是個(gè)函數(shù)
GetMsg是函數(shù)名
(i int) 函數(shù)接收一個(gè)int參數(shù)
(r string) 函數(shù)返回一個(gè)string類型返回值
2、函數(shù)可以返回多個(gè)返回值
這點(diǎn)和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的意思是"在函數(shù)退出時(shí)調(diào)用",特別用于對(duì)文件進(jìn)行讀寫(xiě)操作的時(shí)候,需要在open之后要調(diào)用close操作,將close操作使用defer
func ReadFile(filePath string)(){ file.Open(filePath) defer file.Close() if true { file.Read() } else { return false } }
這樣寫(xiě)的意思是在file.Open后不立即調(diào)用close,當(dāng)return false的時(shí)候調(diào)用file.Close().這樣就有效避免了C語(yǔ)言中的內(nèi)存泄露問(wèn)題。
4、比較難理解的:panic,recover和defer
defer:推薦:go defer(go延遲函數(shù))介紹
Panic和Recover我們就將他們看成是其他語(yǔ)言中的throw和catch
下面這個(gè)例子:
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拋出了信息,并且跳出函數(shù)。Recover接受到了信息,并且繼續(xù)處理。
以上就是go語(yǔ)言函數(shù)介紹的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!