返回值
Go语言中通过return关键字向外输出返回值;如果有返回值,必须在外层添加return。
如果没有返回值,可以省略最后的返回信息。
多返回值
Go语言中函数支持多返回值,函数如果有多个返回值时必须用()将所有返回值包裹起来。
函数可以返回多个值,返回值声明,可以只声明类型;
返回值顺序是return的顺序而非在函数头声明的顺序。
package mainfunc change(a, b int) (x, y int) {x = a + 100y = b + 100return //101, 102//return x, y //同上//return y, x //102, 101}不需要强制命名返回值,但是命名后的返回值可以让代码更加清晰,可读性更强
忽略返回值
比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,这样的话代码可以这样写:
v1, v2, _ := function(...)
返回值命名
函数定义时可以给返回值命名,并在函数体中直接使用这些变量,最后通过return关键字返回。
例如:
func calc(x, y int) (sum, sub int) {sum = x + ysub = x - yreturn}
返回值补充
当我们的一个函数返回值类型为slice时,nil可以看做是一个有效的slice,没必要显示返回一个长度为0的切片。
func someFunc(x string) []int {if x == "" {return nil // 没必要返回[]int{}}...}
//写一个计算商品价格的函数为例,输入参数是单件商品的价格和商品的个数,两者的乘积为商品总价,作为函数的输出值。package mainimport "fmt"func calculateBill(price, no int) int {var totalPrice = price * noreturn totalPrice}func main() {price, no := 90, 6TotalPrice := calculateBill(price, no)fmt.Println("Total price is :", TotalPrice)}------------------------------- 输出 --------------------------------------Total price is : 540
//Go 语言支持一个函数可以有多个返回值。我们来写个以矩形的长和宽为输入参数,计算并返回矩形面积和周长的函数 rectProps。矩形的面积是长度和宽度的乘积, 周长是长度和宽度之和的两倍。即:////面积(area) = 长(length) * 宽(width)//周长(perimeter) = 2 * ( 长 + 宽 )package mainimport "fmt"func r(length, width float64)(float64, float64) {var area = length * widthvar per = (length + width) * 2return per,area}func main() {area ,per := r(5.6,3.6)fmt.Printf("area: %f , per: %f", area, per)}------------------------------- 输出 --------------------------------------area: 18.400000 , per: 20.160000
//_ 在 Go 中被用作空白符,可以用作表示任何类型的任何值。//假使我们只需要计算面积,而并不关心周长的计算结果,该怎么调用这个函数呢?这时,空白符 _ 就上场了package mainimport "fmt"func rect(length, width float64)(float64, float64) {var area = length * widthvar per = 2 * (length + width)return per, area}func main() {area,_ := rect(3.8,4.9)fmt.Printf("area: %f", area)}// ------------------ 返回值 ---------------------area: 17.400000
