Go语言函数返回值

Go语言函数返回值教程

Go 语言函数返回值 我们可以显式的指定返回值的名称,在显式指定返回值名称的时候,如果相邻的几个返回值的类型相同,那么我们可以省略前几个返回值的类型,只需要写最后一个返回值的类型。

Go语言函数返回单个值

语法

func funcName(param1, param2 paramType1, ...)(returnVal returnType){
	// 执行语句...
    returnVal = val
    return
}

说明

这里的函数,只返回了一个值,同时我们指定了函数的返回值名称为 returnVal,在接下来的函数体中,我们只需要给 returnVal 赋值即可。

Go语言函数返回多个值

语法

func funcName(param1, param2 paramType1, ...)(returnVal1, returnVal2 returnType ...){
	// 执行语句...
	return 返回值列表
}

说明

在显式指定返回值名称的时候,如果相邻的几个返回值的类型相同,那么我们可以省略前几个返回值的类型,只需要写最后一个返回值的类型。

案例

返回单个值

Go 语言函数,显式声明返回值变量名

package main
import (
	"fmt"
)
func gcdNormal(x, y int) (gcd int) {
	var n int
	if x > y {
		n = y
	} else {
		n = x
	}
	for i := n; i >= 1; i-- {
		if x%i == 0 && y%i == 0 {
			return i
		}
	}
	return 1
}
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//Go语言函数,显式声明返回值变量名
	gcd := gcdNormal(10,20)
	fmt.Println("Gcd =", gcd)
}

程序运行后,控制台输出如下:

10_golang函数返回值.png

我们定义了一个函数 gcdNormal,传入两个 int 类型 的参数 a 和 b,函数返回一个 int 类型的 变量,在这个函数里,我们显示的指定了函数的返回值为 gcd,但我们在函数体里面没有使用该变量,而是跟以前函数的写法一样,直接返回值。

在 main() 函数里面,我们调用了 gcdNormal 函数,并传入了两个参数 10 和 20,使用 gcd 变量来接受 gcdNormal 函数返回的值,最后使用 Println() 函数打印最后的结果。

返回单个值

Go 语言函数,显式声明返回值变量名

package main
import (
	"fmt"
)
func gcdNormal(x, y int) (gcd int) {
	var n int
	if x > y {
		n = y
	} else {
		n = x
	}
	for i := n; i >= 1; i-- {
		if x%i == 0 && y%i == 0 {
			gcd = i
			return
		}
	}
	gcd = 1
	return
}
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//Go语言函数,显式声明返回值变量名
	gcd := gcdNormal(10,20)
	fmt.Println("Gcd =", gcd)
}

程序运行后,控制台输出如下:

11_golang函数返回值.png

我们定义了一个函数 gcdNormal,传入两个 int类型 的参数 a 和 b,函数返回一个 int 类型的变量,在这个函数里,我们显示的指定了函数的返回值为 gcd。

在函数体里面我们将需要返回的值直接赋值给变量 gcd,然后紧接着加一个 return 语句,这样就实现了返回我们想要的值。(给返回值变量赋值之后,一定要记得加 return 语句)

在 main() 函数里面,我们调用了 gcdNormal 函数,并传入了两个参数 10 和 20,使用 gcd 变量来接受 gcdNormal 函数返回的值,最后使用 Println() 函数打印最后的结果。

返回多个值

Go 语言的函数可以返回多个值

package main
import (
	"fmt"
	"math"
)
func getPageCount(pageSize int)(isOk bool, pageCount int){
	if pageSize <= 0{
		return
	}
	pageCount = int(math.Ceil(float64(100/pageSize)))
	isOk = true
	return
}
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	//Go语言的函数可以返回多个值
	if isOk, pageCount := getPageCount(10); !isOk{
		fmt.Println("Error")
	}else{
		fmt.Println("Ok, PageCount =", pageCount)
	}
}

程序运行后,控制台输出如下:

12_golang函数返回值.png

我们定义了一个函数 getPageCount,传入一个 int类型的参数 pageSize,函数返回一个 bool 类型的变量表示函数是否执行成功,和一个 int 类型的变量表示最终由多少页数据。

同时,我们显示的指定了函数的返回值,一个为 isOk,一个为 pageCount,在函数体里面第一个 if 语句 成立时,我们直接使用了 return 语句,则这时候 isOk 就是 bool类型的默认值,即 fasle,pageCount 就是 int类型的默认值 0,因此这时候返回的就是 false 和 0。

在第二个 if语句里面,我们显示指定了 isOk 和 pageCount 的值,指定完之后,直接使用 return 语句返回。在 main() 函数里面,我们调用了 getPageCount 函数,并传入参数 10,同时,使用两个变量来接受函数的返回值列表。

Go语言函数参数返回值总结

Go 语言的函数的返回值我们可以显式的指定返回值的名称,在显式指定返回值名称的时候,如果相邻的几个返回值的类型相同,那么我们可以省略前几个返回值的类型,只需要写最后一个返回值的类型。Go 语言函数不返回任何值语法:

func funcName(param1, param2 paramType1, ...)(returnVal returnType){
	// 执行语句...
    returnVal = val
    return
}

Go 语言函数返回多个值语法:

func funcName(param1, param2 paramType1, ...)(returnVal1, returnVal2 returnType ...){
	// 执行语句...
	return 返回值列表
}

在显式指定返回值名称的时候,如果相邻的几个返回值的类型相同,那么我们可以省略前几个返回值的类型,只需要写最后一个返回值的类型。