Go语言函数学习教程
本文实例讲述了Go语言函数基本用法。分享给大家供大家参考,具体如下:
这里要说一下是Go函数和一些其他语言不一样的地方
1函数格式不同
funcGetMsg(iint)(rstring){
fmt.Println(i)
r="hi"
returnr
}
func说明这个是个函数
GetMsg是函数名
(iint)函数接收一个int参数
(rstring)函数返回一个string类型返回值
2函数可以返回多个返回值
这点和c,php都不一样,和lua是一样的
funcGetMsg(iint)(rstring,errstring){
fmt.Println(i)
r="hi"
err="noerr"
returnr,err
}
3defer的使用
defer的意思是"在函数退出时调用",特别用于对文件进行读写操作的时候,需要在open之后要调用close操作,将close操作使用defer
funcReadFile(filePathstring)(){
file.Open(filePath)
deferfile.Close()
iftrue{
file.Read()
}else{
returnfalse
}
}
这样写的意思是在file.Open后不立即调用close,当returnfalse的时候调用file.Close().这样就有效避免了C语言中的内存泄露问题。
4比较难理解的:panic,recover和defer
defer的作用前面说得很清楚了。
Panic和Recover我们就将他们看成是其他语言中的throw和catch
下面这个例子:
packagemain
import"fmt"
funcmain(){
f()
fmt.Println("Returnednormallyfromf.")
}
funcf(){
deferfunc(){
ifr:=recover();r!=nil{
fmt.Println("Recoveredinf",r)
}
}()
fmt.Println("Callingg.")
g(0)
fmt.Println("Returnednormallyfromg.")
}
funcg(iint){
ifi>3{
fmt.Println("Panicking!")
panic(fmt.Sprintf("%v",i))
}
deferfmt.Println("Defering",i)
fmt.Println("Printinging",i)
g(i+1)
}
返回了:
Callingg. Printinging0 Printinging1 Printinging2 Printinging3 Panicking! Defering3 Defering2 Defering1 Defering0 Recoveredinf4 Returnednormallyfromf.
Panic抛出了信息,并且跳出函数。Recover接受到了信息,并且继续处理。
这个例子理解了基本就掌握了Recover和Panic
希望本文所述对大家Go语言程序设计有所帮助。