文章目录
一、函数(方法)
1.1、 格式
func 函数名称(形参列表)(返回值列表){
函数体;
}
1.1.1 、无参数无返回值函数
func say() {
fmt.Println("Hello World!!!")
}
1.1.2、有参数无返回值函数
func say(name string) {
fmt.Println("Hello ", name)
}
1.1.3、无参数有返回值
func say() int {
return 3
}
1.1.4、有参数有返回值
func sayOne(a int, b int) int {
return a + b
}
1.2、Go语言中可以给函数的返回值指定名称
// 给返回值指定了一个名称叫做res, return时会自动将函数体内部res做为返回值
// 其实本质上就是提前定义了一个局部变量res,在函数体中使用res就是这个局部变量,返回的也是这个局部变量res
func clculate() (res int) {
res = 1 + 1
return
}
Go语言中的函数允许有多个返回值函数
func clculate(a int, b int) (res int, reOne int) {
res = a + b
reOne = a - b
return
}
二、值的传递和引用传递
- Go语言中,值类型有: int 系列、float系列、bool、string、数组、结构体
- 值类型通常在栈中分配存储空间
- 值类型作为函数参数传递、是拷贝传递
- 在函数体中修改值类型,不会影响到函数外的值
func main() { num := 10 change(num) fmt.Println(num) // 10 } func change(num int) { num = 998 // 函数体内部修改的值 }
2.1、Go语言中 引用类型 有: 指针、slice、map、channel
- 引用类型通常在堆中分配存储空间
- 引用类型作为函数参数传递,是引用传递
- 在函数体内修改引用类型参数,会影响到函数外的值
三、匿名函数
-
匿名函数也是函数的一种, 它的格式和普通函数一模一样,只不过没有名字而已
- 普通函数的函数名称是固定的, 匿名函数的函数名称是系统随机的
-
匿名函数可以定义在函数外(全局匿名函数),也可以定义在函数内(局部匿名函数), Go语言中的普通函
数不能嵌套定义, 但是可以通过匿名函数来实现函数的嵌套定义- 全局匿名函数
//方式一
var a = func() {
fmt.Println("hello world")
}
// 方式二
var (
b = func() {
fmt.Println("hello world2")
}
)
func main() {
a()
b()
}