分享
  1. 首页
  2. 文章

【Golang 基础】 Go 语言 函数式编程

爱写作的程序猿 · · 1548 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:爱写作的程序猿

查看原文:【Golang 基础】 Go 语言 函数式编程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1548 次点击
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏