go-defer-example-2
这里是一个defer使用的例子,思考一下会输出什么:
package main
func test1()bool{
a := false
defer func(){
a = true
}
return a
}
func test2()(a bool){
a = false
defer func(){
a = true
}
defer func() {
a = true
}()
return a
}
输出:
./defer_example.go:4:11: expression in defer must be function call
./defer_example.go:11:11: expression in defer must be function call
解释: defer 语句后面的 ( ) 是用于表示推迟执行的是一个函数调用,而不是一个表达式。
如果省略 ( ),那么编译器会认为后面的内容是一个表达式,而不是一个函数调用,因此会报语法错误。 正确的写法是:
package main
func test1()bool{
a := false
// defer 语句中使用了匿名函数,并且在匿名函数中修改了变量 a 的值。
// 然而,在 Go 语言中,defer 语句要求后面跟随的是一个函数调用,而不是一个表达式。
//defer func(){
// a = true
//}
defer func() {
a = true
}()
return a
}
func test2()(a bool){
a = false
// defer 语句中使用了匿名函数,并且在匿名函数中修改了变量 a 的值。
// 然而,在 Go 语言中,defer 语句要求后面跟随的是一个函数调用,而不是一个表达式。
//defer func(){
// a = true
//}
defer func() {
a = true
}()
return a
}
func main() {
print(test1()) // false
print(test2()) // true
}