开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :函数注意事项和细节(1)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9601
函数注意事项和细节(1)
函数使用的注意事项和细节讨论
1) 函数的形参列表可以是多个,返回值列表也可以是多个。
2) 形参列表和返回值列表的数据类型可以是值类型和引用类型。(可以是整数,字符串,map,数组等)
3) 函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写该函数可以被本包文件和其它包文件使用,类似 pubic ,首字母小写,只能被本包文件使用, 其它包文件不能使用,类似 private。
4)函数中的变量是局部的,函数外不生效【案例说明】
新建文件夹 funcdemo04 新建文件 main.go
代码
//函数中的变量是局部的,函数外不生效
func test() {
//n1是test函数的局部变量,只能在test函数中使用
Var n1 int = 10
}
func main() {
//这里不能使用n1,因为n1是test函数的局部变量
//fmt.Println(“n1=”,n1)
}
5) 基本数据类型和数组默认都是值传递的(不是引用传递),即进行值拷贝。
在函数内修改,不会影响到原来的值。【案例演示】
代码
func test02(n1 int) {
n1 = n1 +10
fmt. Println("test02() n1= ", n1)
}
func main() {
n1 := 20
test02(n1)
fmt. Println("main() n1= ", n1)
}
运行结果
test02() n1=30
main() n1=20
代码
func test02(n1 int) {
n1 = n1 +10
fmt. Println("test02() n1= ", n1)
}
func main() {
num := 20
test02(num)
fmt. Println("main() num= ", num)
}
运行结果
test02() n1=30
main() num=20
6) 如果希望函数内的变量能修改函数外的变量(指的是默认以值传递的方式的数据类型),可以传入变量的地址&,函数内以指针的方式操作变量。
从效果上看类似引用
【案例演示:】
代码//n1 就是*int 类型
func test03(n1 *int) {
fmt.Printf(“n1的地址=%v\n”,&n1)
*n1 =*n1 +10
fmt. Printin("test03() n1=",*n)//30
}
func main() {
num := 20
fmt.Printf(“num的地址=%v”,&num)
test03(&num)
fmt.Println("main() num= ", num)//30
}
运行结果
num 的地址=0xc042010098
n1 的地址=0xc042004030
test03() n1=30
main() num=30
内存
test03 栈
0xc042004030
n1---->[ 0xc042010098 ]
fm.......
main 栈
0xc042010098
num [ 30 ]
整个代码执行后(函数调用完毕后),test03 栈消失
终端
test03()n1 = 30
main()num =30
7) Go 函数不支持函数重载。
func test02(n1 int) {
n1 = n1 +10
fmt. Println("test02() n1= ", n1)
}
func test02(n1 int, n2 int) {
}
该代码是错误的,
在 Golang 语言中不支持传统的函数重载,会报函数重复定义