17、函数

我也有梦想呀 / 2023-05-12 / 原文

1.是什么?

函数就是执行特定任务的代码块

2.函数的意义

  • 避免重复的代码
  • 增强程序的扩展性

3.函数的使用步骤

  • step1 : 函数的定义,也叫声明
  • step2 : 函数的调用,就是执行函数中的代码

4.函数的语法

func funcName (paramName1 type1,paramName2 type2,......)(output1 type1,output2 type2){
// 这里是处理逻辑的代码
// 返回多个值
return val1,val2.....
}

func : 定义函数的关键字
funcName : 函数的名称
() : 函数的标志
参数列表 : 形式参数用于接收外部传入的实际参数
返回值列表 : 函数执行后返回给调用出的结果
注意:可以有多个返回值

5.函数注意事项

  • 函数必须先定义,在调用;如果不定义:undefined:funcName
  • 定义了的函数就去使用它不然没意义
  • 函数名不能重复
  • main() 是一个特殊的函数,作为程序的入口,由系统自动调用,而其他函数则是通过程序员手动通过函数名调用

6.函数简单使用


7.函数的参数

  • 形式参数:函数定义时,用于接收外部传入的数据,叫做形式参数,也叫形参
  • 实际参数:调用函数时,传给形参的实际数据,叫做实际参数,也叫是实参

函数的调用:

  • 函数名必须匹配
  • 实参与形参必须一一对应:顺序,个数,类型

8.可变参数

一个函数中的参数类型确定,但是参数的个数不确定,就可以使用可变参数

func add2(nums ...int) {
	sum := 0
	for _, v := range nums {
		sum += v
	}
	fmt.Printf("%T\n", nums)
	fmt.Printf("%d\n", sum)
}

注意事项:

  • 如果一个函数的参数是可变参数,同事含有其他参数时,可变参数必须放在最后
  • 一个函数只能有一个可变参数

9.参数的传递

数据类型:

  • 按照数据类型:
    • 基本数据类型:
      int float string bool
    • 复合数据类型
      array slice map struct interface ...
  • 按照数据的存储特点来分:
    • 值类型的数据:操作的是数值本身
      int float64 bool string array
    • 引用类型的数据:操作的是数据的地址
      slice map chan

参数传递:

  • 值传递:传递的是数据的副本。修改数据,对于原始的数据没有影响。
    基本类型,值类型数据,array,struct

  • 引用传递:传递的是数据的地址。会出现多个变量指向同一块内存
    应用类型的数据,slice,map,chan


10.函数的返回值

一个函数被调用后,返回给调用出的执行结果,叫做函数的返回值。调用处需要用变量接收返回值


(1)一个函数可以有多个返回值
res1, res2 := rectangle(5, 10)
fmt.Println("周长:", res1)
fmt.Println("面积:", res2)

res3, res4 := rectangle(8, 10)
fmt.Println("周长:", res3)
fmt.Println("面积:", res4)

// 求矩形的周长和面积
func rectangle(len, wid float64) (float64, float64) {
	perimeter := (len + wid) * 2
	area := len * wid
	return perimeter, area
}

// 进阶写法
func rectangle2(len, wid float64) (perimeter, area float64) {
	perimeter = (len + wid) * 2
	area = len * wid
	return perimeter, area
}

11.return语句

一个函数的定义上有返回值,那么函数中必须使用return语句,将结果返回给调用处
函数返回的结果必须和函数定义的一致:类型,个数,顺序
作用:

  • 将函数的结果返回给调用处
  • 同事结束了该函数的执行

12.空白标识符: _

用于舍弃数据的

res5, _ := rectangle(8, 10)
fmt.Println("周长:", res5)
fmt.Println("不需要面积")

13.函数中变量的作用域

作用域:变量可以使用的范围

  • 局部变量:函数内部定义的变量,就叫做局部变量
    • 变量定义在哪儿,就只能在哪个范围内使用,超出作用范围,我们可以认为变量被销毁了
  • 全局变量:函数外部定义的变量,就叫做全局变量
    • 所有的函数都可以使用,而且共享这一份数据

14.递归函数