函数的使用和10点注意事项
1.函数的基本概念
当我们写代码的时候,往往有一些代码可以重复使用,我们把这一些重复使用的的代码块包装成一个整体,当我们需要使用这一些代码时,只需要调用这个函数就可以(也就是直接使用这个打包的代码整体)
2.函数的定义
函数的基本形式:
func 函数名称 (参数列表)(返回值列表){
函数体
return 返回值
}
3.函数使用注意事项
1.函数名称要符合标识符命名规则,首字母的大小写决定了该函数在其他包的可见性:大时其他包可访问,小写时其他包不可访问。
2.函数的参数和返回值需要用()包裹。
3.函数体使用{ }包裹,且 { 必须位于函数返回值同行的行尾。
4.go语言的函数分为系统函数和自定义函数。
5.形参和实参的数据类型既可以是值类型也可以时引用类型。
6.函数内定义的变量只能在函数内使用,它是局部变量。
7.基本数据类型和数组默认都是值传递,也就是在函数体内对其做修改并不会影响其原本的值。如果希望在函数内对函数外的变量进行修改,我们在进行参数传递时应该传递其地址。从效果上看,类似引用。
8.在go中函数也是一种数据类型,我们可以将其赋给一个变量,那这个变量就是函数类型的变量了,可以通过该变量对函数进行调用。同时,函数作为一种数据类型,我们可以把它作为参数,进行调用。
例如:
func add(a,b int) int {
return a+b
}
func main(){
a:=add
result:=a(50,60)
//等价于result=add(50,60)
}
9.为了简化数据类型定义,go支持自定义数据类型。基本语法如下:
type 自定义数据类型名 数据类型
例如:type theINT int
//此时我们可以使用theINT来替代int使用
//我们也可以理解为:theINT是int的一个别名
例如:type mymethod func(int,int ) int
//此时我们可以理解为mymethod=func(int,int) int
//我们可以更加方便的对函数作为参数调用
10.使用_标识符忽略返回值
11.go支持可变参数
func f(args...int) int{
}//支持0到多个参数
func f(n1 int,args...int) int{
}
//支持1到多个参数
//说明args是slice(可理解为动态数组),通过slice[index]访问到各个值
//可变参数需要放在形参列表最后
类似的...
例如我们求1到多个int值的和
func sum(args...int) int{
sum:=0
for i:=0;i<len(args);i++{
sum+=args[i]
}
return sum
}
4.函数基本形式的变形:
1.函数的参数和返回值都可以省略,默认返回值为0;
例如:
func f(){ //参数和返回值都没有
fmt.Println("Hello")
}
func f() int {
fmt.Println("Hello")
return 0
}
2.多个相邻的的相同类似的参数可以简写
例如:
func f(a,b int) (int){
fmt.Println("Hello")
return 0
}
3.支持有名的返回值
例如:
func f(a,b int) (sum int){
sum=a+b
return //return sum的简写形式
}
注意:命名返回值变量后,其会被自动赋值为该类型的零值
4.不支持命名函数的嵌套定义,但允许匿名函数的嵌套定义
5.不支持函数重载和默认值函数
5.值传递和引用传递
1.如果我们希望函数内的变量修改函数外的变量,我可以使用引用传递
2.一般来说地址拷贝效率高,因为数据量小,而值拷贝决定拷贝的数据大小,数据越大,效率越低(如数据量大的结构体)