go语言函数的参数和返回值问题?完全不解

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

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

1、f() 调用时候可以传参数?不定义返回值类型
2、

defer func() {
        ret++
    }()

中的 ret不是参数吗?为啥++之后 f函数的返回值变了

共 2 个回复


heimeil

(ret int)是定义一个int类型的返回值,defer是在函数结束前运行,return 1等于赋值1给ret,然后执行defer里的ret++,最终返回2

# 0

afocus

楼上正解

# 1