本文摘自php中文网,作者尚,侵删。

Go函数和一些其他语言不一样的地方
1、函数格式不同
1 2 3 4 5 6 | 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是一样的
1 2 3 4 5 6 7 | 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
1 2 3 4 5 6 7 8 9 10 11 | 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
下面这个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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)
}
|
返回了:
1 2 3 4 5 6 7 8 9 10 11 12 | 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语言函数介绍的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Go语言如何从切片中删除元素
Go语言函数引用传递值
Go语言的内存模型介绍
Go语言切片(slice)
Go语言如何导入包
Go语言是哪个公司的
Go语言用什么开发工具?
mac电脑怎么安装Go语言环境
Go语言的多行注释是什么
Go语言向函数传递数组
更多相关阅读请进入《Go语言》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » go语言函数介绍