Go return和defer的函數的小問題

如下函數:

package main

import "fmt"

func f() (ret int) {
	defer func() {
		ret++
	}()

	return ret
}
func main() {
	fmt.Println(f())
}

在函數f中,return處初始化了返回值ret爲1,最後執行匿名函數時改變返回值ret使其+1,返回值爲2,則最後打印結果爲2。
做一點改變

package main

import "fmt"

func f() (ret int) {
	defer func() {
		ret++
	}()

	return
}
func main() {
	fmt.Println(f())
}

改變的使f函數的return處,這樣ret沒有被顯式始化,則ret默認爲0,在匿名函數中+1,返回值爲1,最後打印結果是1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章