17、函数
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.函数中变量的作用域
作用域:变量可以使用的范围
- 局部变量:函数内部定义的变量,就叫做局部变量
- 变量定义在哪儿,就只能在哪个范围内使用,超出作用范围,我们可以认为变量被销毁了
- 全局变量:函数外部定义的变量,就叫做全局变量
- 所有的函数都可以使用,而且共享这一份数据