return语句
golang语言规范
https://golang.org/ref/spec#Return_statements
函数F中的 “return”语句会终止F的执行,并可选地提供一个或多个结果值。在F返回给调用者之前,任何被F deferred 的函数都会被执行。
ReturnStmt = "return" [ ExpressionList ] .
在没有结果类型的函数中,”return”语句不能指定任何结果值。
func noResult() {
return
}
有三种方法可以从一个具有结果类型的函数中返回值:
返回值可以在 “return”语句中明确列出。每个表达式必须是单值的,并且可以分配给函数结果类型的相应元素。
func simpleF() int { return 2 } func complexF1() (re float64, im float64) { return -7.0, -4.0 }
“return”语句中的表达式列表可以是对一个多值函数的单次调用。其效果就好比该函数返回的每个值都被分配到一个临时变量中,其类型为相应的值,然后用 “return”语句列出这些变量,这时就适用前一种情况的规则。
func complexF2() (re float64, im float64) { return complexF1() }
如果函数的结果类型为其结果参数指定了名称,那么表达式列表可以为空。结果参数作为普通的局部变量,函数可以根据需要为它们赋值。return 语句返回这些变量的值。
func complexF3() (re float64, im float64) { re = 7.0 im = 4.0 return } func (devnull) Write(p []byte) (n int, _ error) { n = len(p) return }
无论如何声明,所有的结果值在进入函数时都初始化为其类型的零值。指定结果的 “return” 语句会在执行任何deferred 函数之前设置结果参数。
实现限制:如果在返回的地方有不同的实体(常量、类型或变量)与结果参数同名,编译器可以不允许在 “return” 语句中使用空表达式列表。