go是函数式编程语言吗?
不是, 当然不是.
那么, go提供函数吗?
是的, 当然, 大多数编程语言都提供函数, go也不例外.
func SayHello() {
fmt.Println("Hello")
}
go使用关键字func定义函数, 并在函数体中编写函数逻辑.
go函数可以接受参数吗?
额, 这个问题... 哦, 我懂了, 也许是我的SayHello函数给大家造成了错觉, 我会改造我的代码:
func SayHelloToSomeone(name string) {
fmt.Println("Hello " + name + ".")
}
函数SayHelloToSomeone接受一个string类型的参数name.
go函数是否可以有返回值?
是的, 是的, 是的! 就像数学意义上的函数一样, go函数可以返回给调用者一些东西. 为了演示这一点, 我将重新编写一个函数:
func GetGreeting (name string) string {
greeting := "Hello " + name + "."
return greeting
}
// test
greeting := GetGreeting("Bob")
fmt.Println(greeting) //outputs "Hello Bob."
当然这没有什么, 其他语言也可以做到. 但是, 准备好接受惊喜了吗?
go函数的返回值与其他类C语言有些不同, 比如, 你可以为返回值指定名称. 这带来至少2个好处:
1. 不需要在函数体中为返回值定义变量.
2. 无需在return语句后加上返回值. go会自动将返回值加上.
func GetGreeting (name string) (greeting string) {
greeting = "Hello " + name + "."
return
}
GetGreeting函数为其返回值指定了名称: greeting. 在函数体中就可以直接使用greeting变量了, greeting其实就相当于函数中定义的一个局部变量. 而且如你所见, GetGreeting函数的return语句后面没有加上返回值, 因为go会自动将greeting变量的值返回给调用者.
go函数可以返回多个值吗?
这, 这, 你是异想天开吗? 不过强大的go函数能够做到这一点, 哈哈. 要知道可以有多个返回值的函数可以避免很多丑陋的代码, 下面是示例:
type Stack struct {
pos int
data [10]int
}
func (s *Stack) Pop() (value int, ok bool) {
if s.pos > 0 {
s.pos--
ok = true
value = s.data[s.pos]
return
}
ok = false
return
}
代码中首先定义了Stack类型, 并提供了Pop函数. Pop函数返回2个值: value和ok, 分别代表pop的值和pop操作是否成功.
go函数可以接受一个函数作为参数吗?
嗯, 我想你终于开始集中注意力了.
如果你是一个医生, 你是否会对每次都需要向你的病人SayHello感到厌烦? 没关系, go可以帮助你. 首先需要定义新的数据结构:
type TormentList struct {
patients []string
}
// 将[]string(string数组)包装成TormentList类型的指针
func NewTormentList(people []string) *TormentList {
return &TormentList{people}
}
接下来, 让我们悄悄给TormentList类型增加Map方法:
func (g *TormentList) Map(f func(string)) {
// 遍历g.patients, 为其每个value调用f方法
for _, val := range(g.patients) {
f(val)
}
}
Map方法接受f函数作为其输入参数, f函数接受一个string类型的值. 遍历TormentList的病人, 并为每个病人调用f函数.
现在已经做好了一切准备, 剩下的就是测试了:
patients := []string{"Anand", "David", "Ivan", "JoJo", "Jin", "Mon", "Peter", "Sachin"}
gl := NewTormentList(patients)
// 还记得上面定义的SayHelloToSomeone函数吧?
gl.Map(SayHelloToSomeone)
/*
outputs the following:
Hello Anand.
Hello David.
Hello Ivan.
Hello JoJo.
Hello Jin.
Hello Mon.
Hello Peter.
Hello Sachin.
*/
go函数的返回值可以是函数吗?
让我们先考虑一个现实问题: 假如你拥有一份吃过寿司的人的清单, 你是否能够根据人名确定他是否在清单上? 这是个很简单的问题, 你只需遍历清单. 嗯, 如果你go的功底很弱, 不知道怎么遍历清单那怎么办? 没关系, 我会给你提供一个刷选器:
func Screen(patients []string) func(string) bool {
// 定义匿名函数并返回
return func(name string) bool {
for _, soul := range patients {
if soul == name {
return true
}
}
return false
}
}
Screen方法会将刷选的函数返回给调用方, 这样你就可以不用懂怎么去遍历清单了, 你只需调用我返回给你的函数就可以:
// 吃过寿司的人的清单
those_who_bought_sushi := []string{"Anand", "JoJo", "Jin", "Mon", "Peter", "Sachin"}
// 得到刷选器函数
bought_sushi := Screen(those_who_bought_sushi)
// 调用刷选器函数就可以知道某人是否在清单上
fmt.Println(bought_sushi("Anand")) // true
fmt.Println(bought_sushi("Alex")) // false
相关推荐
主要介绍了Go语言中的函数式编程实践,主要讲解Go语言中的函数式编程概念和使用。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
中文名: 面向Java开发者的函数式编程 原名: Functional Programming for Java Developers 作者: Dean Wampler 资源格式: PDF 版本: 英文文字版/更新EPUB版本/更新MOBI版本 出版社: O'Reilly书号: 978-1-4493-1103-2...
在Go中学习函数式编程 这是发布的的代码库。 它包含从头到尾完成本书所必需的所有支持项目文件。 关于这本书 本书通过向您展示如何在Golang中创建和使用函数构造,弥合了Golang开发人员的语言鸿沟。 说明和导航 所有...
Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。本教程是IT营大地老师在2020年4... 最新Golang教程,从环境搭建、语言语法特性到函数式编程、并发编程等等。理论与实战结合,帮助快速掌握Go语言。
Go语言实战.pdf ,看完了go语言圣经,这本书仍值得一看!!
本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带领大家实现一个分布式爬虫的实战项目。 共 5 节 (46分钟) 收起列表 1-1 Google资深工程师...
8.1.4 处理Go语言二进制文件 307 8.1.5 处理自定义的二进制文件 309 8.2 归档文件 317 8.2.1 创建zip归档文件 317 8.2.2 创建可压缩的tar包 319 8.2.3 解开zip归档文件 321 8.2.4 解开tar归档文件 322...
Go是一种通用编程语言,由Google设计;它借鉴了许多其他许多好主意语言,同时避免导致复杂性和不可靠代码的功能。 Go支持多范式,如程序,功能和并发。它的语法传统上来自C语言,但它已经做了很多修改,以改进简单性...
8.1.4 处理Go语言二进制文件 307 8.1.5 处理自定义的二进制文件 309 8.2 归档文件 317 8.2.1 创建zip归档文件 317 8.2.2 创建可压缩的tar包 319 8.2.3 解开zip归档文件 321 8.2.4 解开tar归档文件 322...
是在我对Haskell的一些尝试中开发出来的,目的是复习我的函数式编程。 为了重新学习我的 Haskell 技能(十年前获得,此后很少使用!)我决定选择一个介于“Hello World”和复杂的成熟操作系统之间的非平凡程序。 我...
此回购源于我对Haskell所做的一些尝试,目的是为了完善我的函数式编程。 为了重新学习我的Haskell技能(十年前获得,至今很少使用!),我决定在“ Hello World”和复杂的成熟操作系统之间选择一个简单的程序。 我...
Go语言初级读本。~~~~~~~~~~ Go语言是什么? Google最近发布新型的编程语言,Go。它被设计为将现代编程语言的先进 性带入到目前仍由C语言占统治地位的系统层面。然而,这一语言 仍在试验阶段并在不断演变...
matlab源码求一元函数 ...支持面向对象和函数式编程 能够通过调用C/C++代码扩展功能 代码规范程度高,可读性强 目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Pyth
Go 转换为 Clojure,以在 JVM 上运行或作为 JavaScript 运行。 试试看 无需安装任何东西,您可以尝试在何处输入 Funcgo 并查看它如何转换为 Clojure 并进行评估。 (顺便说一下,在线游览本身就是一个示例 Web 应用...
第二部分:函数式编程,第4章和第5章,讲述了函数式编程用到的技术,及其思维方式,并通过Python和Go修饰器的例子,展示了函数式编程下的代码扩展能力,以及函数
Monkey Lang是一种编程语言,旨在帮助您理解编程语言的幕后工作方式。 编译器当前支持函数,高阶函数,闭包,字符串,整数,数组,哈希和整数算术。 这是Thorsten Ball的《 中的帮助下。 :rocket: 入门 当前,该...
go语言最简单模板照片上传网站 1.0 这个是最简化的go语言demo 使用了以下包中的函数 "os" "io/ioutil" "log" "net/http" "html/template" http/template 双大括号{{}}是区分模板代码和HTML的分隔符 括号里边可以是要...
Fortran 与 C/C++属于性能第一梯队的高级编程语言,适合高性能计算的编程语言一般 无垃圾回收机制,如 C、C++、Fortran、Rust,其中 Fortran 专注于科学计算;像 Julia、Go 这类原生特点优秀或得到充分优化发展的...
一个简单的动态类型编程语言(支持面向对象,函数式编程,闭包等特性)。自己编写的玩具脚本语言,还有很多不足和改进的地方。 建立 Candy通过Java语言编写,需要JRE(Java运行时环境)去运行Candy。Candy所需要的...