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
相关文章推荐
- Go语言基础入门--函数,错误处理
- Go语言学习笔记之函数(function)
- Golang(Go 语言)入门学习-1-包,变量和函数
- go语言快速入门:内建函数(6)
- 举例讲解Go语言中函数的闭包使用
- go语言快速入门:简单工厂模式的实现(23)
- Go语言编程入门超级指南
- Go语言的匿名函数与闭包
- Go语言中的流程控制结构和函数详解
- go语言入门<一>go语言安装
- Mac环境 go语言之入门HelloWorld
- 【Go学习】理解Go语言中的函数闭包
- JAVA入门.零基础学Java语言 MOOC 第7周 函数
- Cg语言入门五之函数一
- Go语言基础入门--简介
- Golang(Go 语言)入门学习-5-映射
- PERL语言入门:第四章:子程序(函数)
- Golang(Go 语言)入门学习-10-错误,数据读取与图像
- 29.笔记go语言——函数多类型参数
- go语言简单的处理http请求的函数实例