GO语言-函数

目录

函数

语法格式

函数的参数使用

可变参数的使用

参数传递

函数的返回值

匿名函数

递归函数

斐波那契数列


函数

语法格式

函数需要写在主函数(main函数)外面

funcName函数名。如果首字母大写,则所有包都可以调用;如果首字母小写,只能被本包访问。

fucn funcName(parameter_name1 type1, parameter_name2 type2, ...) (output_name1 type1, output_name2 type2, ...) {
    //逻辑代码
    //多个返回值
    return value1, value2
}

调用函数语法

funcName(parameter)

函数的参数使用

func main() {
	sum := getSum(10, 20)
	fmt.Println("10到20的和:", sum)
}

func getSum(a, n int) int {
	sum := 0
	for i := a; i <= n; i++ {
		sum += i
	}
	return sum
}


//输出:
//10到20的和: 165

可变参数的使用

可变参数:一个函数的参数类型确定,但是参数的个数不确定。

  1. 如果一个函数有可变参数,也有其他参数,那么可变参数要放在参数列表的最后
  2. 一个函数的参数里,最多只能由一个可变参数
  3. 在函数中,可变参数就是切片

可变参数语法

func func_name(parameter_name ... type) { ... }

示例

func main() {
	getNums(10, 20, 30, 31, 40)
}

func getNums(nums ...int) {
	fmt.Println("函数中可变参数nums:", nums)
	fmt.Printf("函数中可变参数nums的类型:%T\n", nums)
}

参数传递

参数传递时分两种情况

值传递:传递的实参时值类型的时候,将值复制一份给形参。

引用传递:传递的实参是引用类型的时候,如slice。slice存的是底层array的内存地址,则是复制一份底层array的内存地址给形参。

函数的返回值

函数中的值的作用域都是在函数内部。如果要在函数外部获取函数中的值,则可以通过返回值列表,定义函数返回值。将函数中的值作为返回值传递至外部。

  1. 函数返回值列表的返回值名字写不写都可以,可以只写返回值类型。
  2. 如果函数的定义里有返回值,则函数内部必须有return语句,将结果返回给调用处。
  3. 可以在函数返回值列表中,指定要返回的值名,这样return语句后面可以省略返回值名称。
  4. 函数一旦出现retrun语句,函数就结束了。所以retrun语句一定要写在执行逻辑的最后。
  5. 返回值可以有多个,且类型可以不同。返回值的顺序同retrun后面的顺序。
func main() {
	fnum, lnum := getNums(10, 20, 30, 31, 40)
	fmt.Printf("fnum的值:%v, fnum的类型:%T \nlnum的值:%v, lnum的类型:%T \n", fnum, fnum, lnum, lnum)
}

func getNums(nums ...int) (firstNum int, lastNum string) {
	firstNum = nums[0]
	tmpNum := nums[len(nums)-1]
	lastNum = strconv.Itoa(tmpNum)
	return firstNum, lastNum
}

匿名函数

 匿名函数就是没有名字的函数。

通常匿名函数只能执行一次。也可以将匿名函数赋值给某个变量,就可以执行多次了。

匿名函数作用:

  1. 回调函数:将匿名函数作为参数传入
  2. 闭包:将匿名函数作为返回值
func main() {
	func() {
		fmt.Println("我是一个匿名函数,func1")
	}()

	func2 := func(p string) {
		fmt.Println("我是一个匿名函数,func2;本次传参的值:", p)
	}

	func2("a")
	func2("xxx")
}

 第一个匿名函数,由于没有赋值给变量,只能使用一次。

第二个匿名函数,赋值给了func2,所以可以多次调用func2。

递归函数

递归函数,就是函数本身会不停调用自己,但是会有个终点。

示例

func main() {
   fmt.Println(recursion(5))
}
func recursion(n int) int {
   if n == 1 {
      return 1
   }
   return recursion(n-1) + n
}

GO语言-函数_第1张图片 

斐波那契数列

fibonacci数列:前两项为1,后面的每一项都等于前两项的和

使用递归的方法,,打印fibonacci数列。

func main() {
    for i := 1; i<=12;i++{
        fmt.Printf("%d ",getFibonacci(i))
    }
}
func getFibonacci(n int)int{
   if n ==1 || n==2{
      return 1
   }
   return getFibonacci(n-1)+getFibonacci(n-2)
}

 

你可能感兴趣的:(Golang,golang,开发语言,后端)