多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 函数知识点小问题 * * * * * --: 作者:Mick 时间:2018年10月25日 * * * * * 1:函数实现 2:什么是高阶函数 3:什么是自由变量 4:什么是闭包函数 5:函数签名定义 ``` package _func import "fmt" type Printer func(contents string)(n int,err error) func printToStd(c string)(int,error){ return fmt.Println(c) } type operate func(x,y int) interface{} // 通过 calculate函数来实现两个整数间的加减乘除运算,但是希望两个整数和具体的操作都由该函数的调用方给出 func Run(){ //函数实现 //demo1() //demo2() //demo3 } func demo1(){ var p Printer p = printToStd fmt.Println(p) p("some") } func demo2(){ add := calculateNew(1,2,func(x int,y int)interface{}{ return x+y }) fmt.Println(add) } func demo3(){ x,y := 56,78 add := genCalculate(func(x,y int)interface{}) result,err := add(x,y) fmt.Println(result,err) } func genCalculate(){ } func calculateNew(x,y int,op operate) interface{} { if op == nil { return 0 } return op(x,y) } ``` ``` package main import "fmt" // 函数是一等公民:参数,变量,返回值都可以是函数 // 高阶函数 参数与返回值是函数 // 函数-》闭包 func adder() func(int)int{ sum := 0 fmt.Printf("%d\n",&sum) return func(v int) int{ sum += v fmt.Printf("%d\n",&sum) return sum } } // 传统函数递归实现 type iAdder func(int)(int,iAdder) func adder2(base int) iAdder { return func(v int)(int,iAdder){ return base+v,adder2(base+v) } } func oldAdder(v int)int{ sum := 0 for i:=0;i<v;i++{ sum +=i } return sum } func main(){ //a := adder() //a(0) //a(1) b := adder2(0) v1,f1 := b(1) fmt.Println(v1,f1) v2,f2 := f1(2) fmt.Println(v2,f2) //start := time.Now().UnixNano() // 闭包求和 451 158 200 //a := adder() //for i := 0;i < 100000; i++ { //fmt.Println(a(i)) //} //oldAdder效率地下2 654 060 200 //for i := 0;i < 100000; i++ { // fmt.Println(oldAdder(i)) //} //end := time.Now().UnixNano() //fmt.Println(start," - ",end," = ",end-start) } ```