内容简介:Golang支持头等函数的机制。头等函数:支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的参数或返回值。满足下列条件之一的函数就是高阶函数:
Golang支持头等函数的机制。
头等函数:支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的参数或返回值。
匿名函数
func main(){ a:=func(){ fmt.Println("Hello World!") } a() fmt.Printf("%T",a) }
-
这是把函数赋值给变量的语法,给a赋值的函数没有函数名称,这类函数称为匿名函数。
2.调用该函数的唯一方式就是使用变量a。打印出的a的类型是func()。
3.要调用一个匿名函数且不赋值给变量,可以这样写:
package main import( "fmt" ) func main(){ func(){ fmt.Println("hello world!") }() }
自定义的函数类型
就是取别名,这样写
type add func(a int, b int)int
创建的新的函数类型就是add,参数是两个int变量,返回一个int类型。
add新函数类型的定义和使用:
package main import( "fmt" ) type add func(a int, b int)int func main(){ var a add = func(a int ,b int) int{ return a+b } s := a(5, 6) fmt.Println(s) }
高阶函数
满足下列条件之一的函数就是高阶函数:
1.接收一个或多个函数作为参数
2.返回值就是一个函数
函数作为其他函数的参数
func simple(a func(a, b int) int) { fmt.Println(a(60, 7)) } func main() { f := func(a, b int) int { return a + b } simple(f) }
函数作为返回值
func simple() func(a, b int) int { f := func(a, b int) int { return a + b } return f } func main() { s := simple() fmt.Println(s(60, 7)) }
闭包
闭包是匿名函数的一个特例。当一个匿名函数所访问的变量定义在函数体外时,就称这样的匿名函数为闭包
package main import ( "fmt" ) func appendStr() func(string) string { t := "Hello" c := func(b string) string { t=t+""+b return t } return c } func main() { a := appendStr() b := appendStr() fmt.Println(a("World")) fmt.Println(b("Everyone")) fmt.Println(a("Gopher")) fmt.Println(b("!")) }
头等函数的实用
1.过滤一个students切片,筛选条件
选出grade是B的
type student struct { firstName string lastName string grade string country string } unc filter(s []student, f func(student) bool) []student { var r []student for _, v := range s { if f(v) == true { r = append(r, v) } } return r } func main() { s1 := student{ firstName: "Naveen", lastName: "Ramanathan", grade: "A", country: "India", } s2 := student{ firstName: "Samuel", lastName: "Johnson", grade: "B", country: "USA", } s := []student{s1, s2} f := filter(s, func(s student) bool { if s.grade == "B" { return true } return false }) fmt.Println(f) }
2.筛选India的student
c := filter(s, func(s student) bool { if s.country == "India" { return true } return false }) fmt.Println(c)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP典型模块与项目实战大全
杨宇 / 清华大学出版社 / 2012-1 / 79.00元
《PHP典型模块与项目实战大全》以实战开发为原则,以PHP典型模块和项目开发为主线,通过12个高质量的PHP典型模块和6个PHP大型应用,向读者揭示了Web开发的整体结构,并详尽地介绍PHP开发与建站的技术要点。《PHP典型模块与项目实战大全》附带1张DVD,内容是作者为《PHP典型模块与项目实战大全》录制的全程多媒体语音教学视频及《PHP典型模块与项目实战大全》所涉及的源代码。《PHP典型模块与......一起来看看 《PHP典型模块与项目实战大全》 这本书的介绍吧!
Markdown 在线编辑器
Markdown 在线编辑器
正则表达式在线测试
正则表达式在线测试