Golang学习笔记7:Golang函数(下)
匿名函数
f := func(x , y , int ) int {
return x + y
}
例如:
package main
import "fmt"
func main(){
f :=func (x , y int) int {
return x + y
}
fmt.Println(f(2,3))
}
Go语言的小特性
defer
file.Open("file")
defer file.Close()
就算出现异常,也会defer操作关闭文件,实现安全编程的目的。
defer 用来进行资源的关闭
package main
import "fmt"
func main(){
for i :=1 ; i <= 5 ; i ++{
defer fmt.Println(i)
}
fmt.Println("before defer")
}
输出结果:
before defer
5
4
3
2
1
进程 已完成,退出代码为 0
先defer 的后执行
例子二:
package main
import "fmt"
func main(){
defer func(){
fmt.Println("After defer")
}() //defer 加函数体加执行函数的一个括号表示
f := func(){ //上面的和这第二个等价
fmt.Println("After defer 2")
}
defer f()
fmt.Println("before defer")
}
此时输出结果:
before defer
After defer 2
After defer //先defer 的后执行
Golang中捕获异常
panic 和 Recover(go的异常处理机制)
package main
import "fmt"
func main(){
defer func(){
fmt.Println("After defer")
}()
panic ("i am wrong~!")
fmt.Println("before defer")
}
输出结果:
After defer
panic: i am wrong~!
goroutine 1 [running]:
main.main()
C:/Users/yesai/IdeaProjects/12/12.go:96 +0x49
进程 已完成,退出代码为 2
先执行第一个函数,显示“After defer”
然后抛出panic 异常,
下面一句“before defer”,不执行。
Recover是从异常中恢复。
函数也可以作为值、类型(type)
type typeName func(input1 inputType1,input2 inputType2[, ...]])
(result1 resultType1[, ...])
相当于C语言中的typedef。
函数的一种高级用法。
package main
import "fmt"
func main(){
type sum func(x , y int) int
var f sum = func (x , y int) int{
return x + y
}
fmt.Println(f(3,4))
}
返回7。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赛 の 任意门!
评论
ValineGitalk