您的位置:首页 > 编程语言 > Go语言

Go语言入门6-函数function

2019-01-06 23:42 375 查看

函数function

  • Go 函数 不支持 嵌套、重载和默认参数,但支持以下特性:

无需声明原型、不定长度变参(…)、多返回值、命名返回值参数
匿名函数、闭包

函数可以没有参数或接受多个参数。
注意类型在变量名 之后。

func add(x int, y int) int {
return x + y
}

func main() {
fmt.Println(add(42, 13))	//55
}

当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。

func add(x, y int) int {
return x + y
}

func main() {
fmt.Println(add(42, 13))
}

不定长度变参

func main() {
A(1, 2, 3, 4, 5)
}

func A(a ...int) {
fmt.Println(a) //[1 2 3 4 5]
}

多返回值、命名返回值参数

func split(sum int) (x, y int) {
x = sum * 4 / 2
y = sum - x
return
}

func main() {
fmt.Println(split(17))	//34 -17
}

闭包

func main() {
f := closure(10)
fmt.Println(f(11))	//21
}

func closure(x int) func(int) int {
return func(y int) int {
return x + y
}
}

斐波纳契闭包

func fibonacci() func() int {
f0, f1, f2 := 0, 1, 0
index := 0
return func() int{
if index == 0 {
index += 1
return f0
} else if index == 1 {
index += 1

return f1
} else {
f2 = f0 + f1
f0 = f1
f1 = f2
return f2
}
}
}

func main() {
f := fibonacci()
for i := 0; i < 100; i++ {
fmt.Println(f())
}
}

demo

func main() {
var fs = [4]func(){}

for i := 0; i < 4; i++ {
defer fmt.Println("defer i = ", i)
defer func() {
fmt.Println("defer_closure i = ", i)
}()
fs[i] = func() {
fmt.Println("closure i = ", i)
}
}

for _, f := range fs {
f()
}
}

结果:

closure i = 4
closure i = 4
closure i = 4
closure i = 4
defer_closure i = 4
defer i = 3
defer_closure i = 4
defer i = 2
defer_closure i = 4
defer i = 1
defer_closure i = 4
defer i = 0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: