Java教程

函数

本文主要是介绍函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

七、函数

函数是基本的代码块,用于执行一个任务。

Go 语言至少有一个入口main() 函数。

1 函数定义

函数定义的格式如下:

func function_name( [parameter list] ) [return_types] {
   函数体
} // 函数的作用范围就在大括号之间{}

函数定义解析:

  • func:函数由 func 开始声明
  • function_name:函数名称,参数列表和返回值类型构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。声明一个参数的语法采用 参数名 参数类型 的方式,多个参数的声明用逗号隔开。
  • return_types:返回类型,规定了函数的返回值类型return_types。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • 函数体:函数定义的代码集合。

举例:

// 定义一个函数
func max(a,b int) int { //如果有连续若干个参数,它们的类型一致,那么我们无须一一罗列,只需在最后一个参数后添加该类型。
	ret := a
	if a>b{
		fmt.Println("a比b大")
	}else if a==b {
		fmt.Println("a等于b")
	}else {
		fmt.Println("b比a大")
		ret = b
	}
	return ret
}

2 函数调用

调用函数,(如果需要参数)向函数传递参数,(如果有返回值)并得到返回值,例如:

func main() {
	ret := max(10,20) // 调用函数,得到返回值
	fmt.Println(ret)
}

得到输出:b比a大\n20

3 其它

调用函数,可以通过两种方式来传递参数:值传递和引用传递。

默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。

Go 语言支持一个函数可以有多个返回值。如果一个函数有多个返回值,那么这些返回值必须用括号括起来。

func swap(x, y string) (string, string) { //这些返回值必须用括号括起来
   return y, x
}

func main() {
   a, b := swap("Google", "baidu")
   fmt.Println(a, b)
}

还可以在定义的时候命名返回值,从函数中可以返回一个命名值。

func rectProps(length, width float64)(area, perimeter float64) {  
    area = length * width
    perimeter = (length + width) * 2
    return // 不需要明确指定返回值,默认返回 area, perimeter 的值
}
/*请注意, 函数中的 return 语句没有显式返回任何值。由于 area 和 perimeter 在函数声明中指定为返回值, 因此当遇到 return 语句时, 它们将自动从函数返回。*/

下划线_在 Go 中被用作空白符,可以用作表示任何类型的任何值。

func swap(x, y string) (string, string) {
	return y, x
}

func main() {
	a, _ := swap("Google", "baidu") // 空白符_ 用来跳过不想要的返回结果
	fmt.Println(a)
}

4 函数作为另外一个函数的实参

Go 语言可以很灵活的创建函数,并作为另外一个函数的实参。

func square(a int) int {
	return a*a
}
func swap(a,b int) (int,int){
	return b,a
}
func main() {
	reta,retb := swap(20,square(5))
	fmt.Println(reta,retb)
}

5 闭包和匿名函数

Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
     return i  
   }
}

func main(){
   /* nextNumber 为一个函数,函数 i 为 0 */
   nextNumber := getSequence()  

   /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   
   /* 创建新的函数 nextNumber1,并查看结果 */
   nextNumber1 := getSequence()  
   fmt.Println(nextNumber1())
   fmt.Println(nextNumber1())
}

以上代码执行结果为:

1
2
3
1
2
这篇关于函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!