Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)

一、函数格式

  • 函数的格式如下:
func 函数名(参数列表) [返回值] {
    函数体
}

二、函数返回值

  • 函数返回值有三种情况:
    • 函数无返回
    • 函数返回单个值
    • 函数返回多个值

①函数无返回

  • 函数无返回值时,可以省略返回值列表。格式如下:
func 函数名(参数列表) {
    函数体
}

  • 例如:
package main

import (
    "fmt"
)

func myFunc() {
    fmt.Println("HelloWorld")
}

func main() {
    myFunc()
}

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第1张图片

②函数返回单个值

  • 函数有返回值,且只有一个返回值时。格式如下:
func 函数名(参数列表) 返回值类型 {
    函数体

    return 返回值
}
  • 例如:
package main

import (
	"fmt"
)

func myFunc(num int32) int32 {
	return num
}

func main() {
	fmt.Println(myFunc(100))
}

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第2张图片

③函数返回多个值

  • 函数有返回值,且有多个返回值时。格式如下:
func 函数名(参数列表) (返回值1类型, 返回值2类型...) {
    函数体

    return 返回值1,返回值2
}
  •  例如:
package main

import (
	"fmt"
)

func getPrize() (int, string) {
	i := 2
	s := "HelloWorld"
	return i,s
}

func main() {
	quantity, prize := getPrize()
	fmt.Println(quantity, prize)
}

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第3张图片

三、不定参函数

  • 不订餐函数是指参数数量不确定的函数
  • 格式如下:
    • 切片会在后面文章介绍
    • 中间使用三个点...
    • 最后使用一个数据类型表示这些参数的数据类型
func 函数名(切片变量...数据类型) [返回值] {
    函数体
}
  • 参数传递时的注意事项:
    • 调用不定参函数时,可以不传递参数给函数,此处参数数量为0(见下面示例①)
    • 不定参参数列表之前还可以有其他参数值(见下面示例②)
    • 如果出了不定参参数列表还有其他参数,不定参参数列表必须放在最后,不能放在其他参数前面(见下面示例③)

示例①

package main

func myFunc(numbers...int) { }

func main() {
	myFunc()
}

示例②

package main

func myFunc(str string, numbers...int) { }

func main() {
	myFunc("HelloWorld")
	myFunc("HelloWorld", 1)
	myFunc("HelloWorld", 1, 2)
}

示例③

//这个函数的定义是错误的,不定参参数必须放在后面
func myFunc(numbers...int, str string) { }

演示案例

  • 下面定义一个函数来计算不定参数中的数的和
package main

import "fmt"

func sumNumbers(str string, numbers...int) (string, int){ 
	total := 0
	for _,number := range numbers {
		total += number
	}
	return str, total
}

func main() {
	fmt.Println(sumNumbers("sum", 1, 2, 3, 4))
}

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第4张图片

四、具名返回值

  • 具名返回值让函数能够在返回前将值赋值给具名变量,这有助于提升函数的可读性,使其功能更加明确
  • 格式如下:
func 函数名(参数列表) (具名变量1 具名变量数据类型,具名变量2 具名变量数据类型...) {
    函数体
    return
}

演示案例

  • 下面的sayHi()函数定义了两个具名变量x,y,然后我们在函数内为变量x,y赋值,最后使用一个return将它们返回
package main

import "fmt"

func sayHi() (x, y string){
	x = "Hello"
	y = "World"
	return
}

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

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第5张图片

  • 下面几个返回值用法都是可以的
func sayHi() (x int, y string){
	x = 10
	y = "Hello"
	return
}
func sayHi() (x int, y, z string){
	x = 10
	y = "Hello"
	z = "World"
	return
}
func sayHi() (x int, y, z string, q bool){
	x = 10
	y = "Hello"
	z = "World"
	q = true
	return
}

五、递归函数

  • Go也支持递归函数

演示案例

package main

import "fmt"

func feedMe(portion int, eaten int) int {
	eaten = portion +eaten
	if(eaten >= 5) {
		fmt.Println("I'm full! I've eaten %d\n", eaten)
		return eaten
	}
	
	fmt.Println("I'm still hungry! I've eaten %d\n", eaten)
	return feedMe(portion,eaten)
}

func main() {
	fmt.Println(feedMe(1 ,0))
}

 

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第6张图片

六、将函数作为值使用

  • Go语言提供了一些函数式编程功能,可以将函数赋值给一个变量,再通过变量来调用它们
  • 从本质上说,Go将函数视为一种类型,因此可将函数赋给变量,以后再通过变量调用它们

演示案例

  • 演示案例①:将函数赋值给一个变量,然后通过变量调用函数
package main

import "fmt"

func main() {
	fn := func() {
		fmt.Println("function called")
	}
	
	fn()
}

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第7张图片

  • 演示案例②:将函数当做一个参数变量传递给另一个函数
package main

import "fmt"

func returnNum(num int64) int64 {
    return num
}

func main() {
    num := func() int64 {
        return 100
    }
	
    fmt.Println(returnNum(num()))
}

Go:06---Go函数用法(多返回值函数、不定参函数、具名返回值、将函数作为值传递)_第8张图片

你可能感兴趣的:(Go,多返回值函数,不定参函数,具名返回值,将函数作为值传递)