普通函数-函数细节注意点
# 3. 函数细节注意点
# 1. Golang中函数不支持重载
- 不能有同名的函数
# 2. Golang中支持可变参数 (如果你希望函数带有可变数量的参数,传递多个值 … )
- args...int 可以传入任意多个数量的int类型的数据
package main
import "fmt"
// 定义一个函数,函数的参数为:可变参数 ... 参数的数量可变
// args...int 可以传入任意多个数量的int类型的数据 传入0个,1个,,,,n个
func test(args ...int) {
//函数内部处理可变参数的时候,将可变参数当做切片来处理
//遍历可变参数:
for i := 0; i < len(args); i++ {
fmt.Println(args[i])
}
}
func main() {
test()
fmt.Println("--------------------")
test(3)
fmt.Println("--------------------")
test(37, 58, 39, 59, 47)
}
/*
--------------------
3
--------------------
37
58
39
59
47
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 3. 基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。
# 4. 以值传递方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。从效果来看类似引用传递。(改变函数变量的值)
# 5. 在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。
package main
import "fmt"
// 定义一个函数:
func test1(num int) {
fmt.Println(num)
}
func main() {
//函数也是一种数据类型,可以赋值给一个变量
a := test1 //变量就是一个函数类型的变量
fmt.Printf("a的类型是:%T,test函数的类型是:%T \n", a, test1) //a的类型是:func(int),test函数的类型是:func(int)
//通过该变量可以对函数调用
a(10) //等价于 test(10)
}
/*
a的类型是:func(int),test函数的类型是:func(int)
10
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 6. 函数既然是一种数据类型,因此在Go中,函数可以作为形参,并且调用(把函数本身当做一种数据类型)
package main
import "fmt"
// 定义一个函数:
func test3(num int) {
fmt.Println(num)
}
// 定义一个函数,把另一个函数作为形参:
func test302(num1 int, num2 float32, test3Func func(int)) {
fmt.Println("-----test302")
}
func main() {
//函数也是一种数据类型,可以赋值给一个变量
a := test3 //变量就是一个函数类型的变量
fmt.Printf("a的类型是:%T,test3函数的类型是:%T \n", a, test3) //a的类型是:func(int),test3函数的类型是:func(int)
//通过该变量可以对函数调用
a(10) //等价于 test3(10)
//调用test302函数:
test302(10, 3.19, test3)
test302(10, 3.19, a)
}
/*
a的类型是:func(int),test3函数的类型是:func(int)
10
-----test302
-----test302
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 7. 为了简化数据类型定义,Go支持自定义数据类型 (type 别名)
基本语法: type 自定义数据类型名 数据类型
可以理解为 : 相当于起了一个别名 例如:type mylnt int -----》这时mylnt就等价int来使用了.
编辑 (opens new window)