内容简介:在 Go 语言中函数是一等公民,它作为一个变量、类型、参数、返回值,甚至可以去实现一个接口,但是 Go 语言中函数不支持重载、嵌套和默认参数。还是以 斐波那契数列为例,将其当做一个文件流来读取.
Go 语言函数式编程
在 Go 语言中函数是一等公民,它作为一个变量、类型、参数、返回值,甚至可以去实现一个接口,但是 Go 语言中函数不支持重载、嵌套和默认参数。
-
通过使用
func
关键字来定义函数
package main func main(){ }
函数支持的特性
- 作为变量;
func test(){ // 函数体 } funcTest := test fmt.Println(funcTest())
- 匿名函数
test := func(){ // 函数体 }
- 作为类型;
package main import "fmt" type iAdder func(int, int) int func main(){ var adder iAdder = func(a int, b int) int { return a + b } fmt.Println(adder(1,2)) // 3 }
- 不定长度变参;
func test(num ...int){ fmt.Println(num) // [1 2 3 4] } test(1,2,3,4)
- 多返回值;
func test() (string,int,bool){ return "Hello World", 100, true } v1, v2, v3 := test() fmt.Println(v1, v2, v3) // Hello World 100 true
- 命名返回值参数;
func test() (a string, b bool, c int) { a = "Golang" b = false c = 200 return } v1, v2, v3 := test() fmt.Println(v1, v2, v3) // Golang false 200
- 闭包
package main import "fmt" // 使用 闭包实现 斐波那契数列 func fibonacci() func() int { a, b := 0, 1 return func() int { a, b = b, a +b return a } } func main(){ f := fibonacci() fmt.Println(f()) // 1 fmt.Println(f()) // 1 fmt.Println(f()) // 2 fmt.Println(f()) // 3 fmt.Println(f()) // 5 }
- 使用函数实现接口
还是以 斐波那契数列为例,将其当做一个文件流来读取.
package main import ( "fmt" "io" "bufio" "strings" ) // 使用 闭包实现 斐波那契数列 func fibonacci() intGen { a, b := 0, 1 return func() int { a, b = b, a + b return a } } // 定义一个类型 type intGen func() int // 实现一个 Reader 接口 func (g intGen) Read(p []byte) (n int, err error) { // 获取下一个元素值 next := g() if next > 10000 { return 0, io.EOF } // 将一个数值转为字符串 s := fmt.Sprintf("%d/n", next) return strings.NewReader(s).Read(p) } // 使用 Reader 读取的方法 func printFileContents(reader io.Reader){ scanner := bufio.NewScanner(reader) for scanner.Scan() { fmt.Println(scanner.Text()) } } func main(){ f := fibonacci() printFileContents(f) }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java 语言导学
Mary Campione Kalrath Alison Huml / 机械工业 / 2003-1 / 39.00元
《Java 语言导学(原书第3版)》既适合初学者,也适合有经验的程序员:新程序员通过从头到尾阅读《Java 语言导学(原书第3版)》可以得到最大的收获,包括按照第1章“起步”中的步骤说明编译和运行自己的第一个程序。有过程式语言(比如C)经验的程序员可能希望从Java编程语言的面向对象概念和特性开始学习。 有面向对象编程经验的程序员可能希望先学习更高级的内容。一起来看看 《Java 语言导学》 这本书的介绍吧!