一、函数
1.举个🌰
1
2
3
| func sum(a,b int) int{
return a+b
}
|
func : 关键字func
sum :函数名
(a,b int) int:可以传入两个int类型的形参,返回值为int类型
2.多返回值
1
2
3
4
5
6
7
8
| func sumAndsub(a,b int) (int,int){
return a+b,a-b
}
func main(){
sum,sub:=sumAndsub(5,3)
fmt.Println(sum,sub) // 8 2
}
|
3.可变参数
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
| // 可变参数列表需在参数列表中的最后一位,且为切片类型
func operation(op string, params ...int) int {
result := 0
switch {
case op == "+":
for _, v := range params {
result += v
}
case op == "*":
result = 1
for _, v := range params {
result *= v
}
}
return result
}
func main() {
result1 := operation("+", 1, 2, 3, 4)
result2 := operation("*", 1, 2, 3, 4)
fmt.Println(result1) // 10
fmt.Println(result2) // 24
}
//运行结果
params的类型为[]int
params的类型为[]int
10
24
|
4.匿名函数
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
32
33
34
35
36
| func creatFunc1() func() int {
i := 0
return func() int {
i++
return i
}
}
func creatFunc2() func() int {
i := 0
return func() int {
defer func() {
i++
}()
return i
}
}
func main() {
addFunc1 := creatFunc1()
fmt.Println(addFunc1())
fmt.Println(addFunc1())
fmt.Println(addFunc1())
fmt.Println("===============")
addFunc2 := creatFunc2()
fmt.Println(addFunc2())
fmt.Println(addFunc2())
fmt.Println(addFunc2())
}
运行结果:
1
2
3
===============
0
1
2
|
二、方法
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
32
| type rectangle struct {
long int
width int
}
func (r rectangle) getArea() int {
return r.long * r.width
}
func (r rectangle) getGirth() int {
return (r.long + r.width) * 2
}
func main() {
r := rectangle{
long: 3,
width: 4,
}
fmt.Println(r.getArea())
fmt.Println(r.getGirth())
fmt.Println("=============")
ga := rectangle.getArea
fmt.Println(ga(r))
gg := rectangle.getGirth
fmt.Println(gg(r))
}
运行结果:
12
14
=============
12
14
|
三、总结
二者概念基本相同,区别是二者所属的对象不同
函数属于包,方法属于类型