趣味学习Golang快速上手

函数高级玩法

2019-05-09  本文已影响0人  mick_

函数的功能

头等公民

支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的参数或返回值,go语言支持这种机制,故称为头等函数。

函数签名

函数签名是指函数的参数列表+结果列表的统称,只要参数列表+结果列表一致即可认为函数签名相同,主要用于鉴别不同函数的特征,同事也定义了我们与函数的交互方式(即怎么使用函数)

高阶函数

高阶函数是指满足 接受其他的函数作为参数传入或 把其他的函数作为结果返回即可认为是高阶函数

闭包函数

若一个函数引用的自由变量,并被当做参数或结果使用,则此函数被称为闭包函数
自由变量是指变量不在函数的参数或结果中,也不再函数体中声明,是外部变量的引用,则此变量在闭包中被称为自由变量


61f3689a0023e83407ccae081cdd8108.png

闭包的意义? 表面上看仅仅是延迟实现了一部分程序的逻辑或功能而已,实际上,我们是在动态的生成部分程序逻辑

案例-斐波那契

// 1 1 2 3 5 8
func fibonacci()func()int{
    a,b :=0,1
    return func()int{
        a,b = b,a+b
        return b
    }
}

案例-函数实现接口

type Reader interface{
    Read()
}
type MyReader func()
func(m MyReader) Read(){
    fmt.Println("hello")
}
func PrintReader(r Reader){
    r.Read()
}
func main(){
    var m  MyReader
    PrintReader(m)
}

案例-左右遍历

type Node struct{
   left *Node
   name string
   right *Node
}
func(n *Node) Traverse(){
   if n == nil{
       return
   }
   n.left.Traverse()
   fmt.Println(n.name)
   n.right.Traverse()
}

func main(){
   n := Node{
       name:"parent",
       left:&Node{name:"left"},
       right:&Node{name:"right"},
   }
   n.Traverse()
}
上一篇下一篇

猜你喜欢

热点阅读