go 基礎7 函數語言程式設計
阿新 • • 發佈:2019-02-14
go 基礎7
更多幹貨
程式碼地址:
概述
-
函數語言程式設計
-
閉包
-
-
資源管理出錯處理
-
defer呼叫 確保在函式結束時呼叫
-
defer 先入後出
-
程式碼
package main import "fmt" func adder() func(int) int { sum := 0 return func(v int) int { sum += v 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 main() { // a := adder() is trivial and also works. a := adder2(0) for i := 0; i < 10; i++ { var s int s, a = a(i) fmt.Printf("0 + 1 + ... + %d = %d\n", i, s) } }
函式實現介面
package main import ( "bufio" "fmt" "io" "strings" "golearn/functional/fib" ) type intGen func() int 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) // TODO: incorrect if p is too small! return strings.NewReader(s).Read(p) } func printFileContents(reader io.Reader) { scanner := bufio.NewScanner(reader) for scanner.Scan() { fmt.Println(scanner.Text()) } } func main() { var f intGen = fib.Fibonacci() printFileContents(f) }