mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:55:28 +08:00
fix: coding style and file format for chapter 11, 12, 13, 14 and 15.
This commit is contained in:
@@ -1,59 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Any interface{}
|
||||
type EvalFunc func(Any) (Any, Any)
|
||||
|
||||
func main() {
|
||||
fibFunc := func(state Any) (Any, Any) {
|
||||
os := state.([]uint64)
|
||||
v1 := os[0]
|
||||
v2 := os[1]
|
||||
ns := []uint64{v2, v1 + v2}
|
||||
return v1, ns
|
||||
}
|
||||
fib := BuildLazyUInt64Evaluator(fibFunc, []uint64{0, 1})
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Printf("Fib nr %v: %v\n", i, fib())
|
||||
}
|
||||
}
|
||||
|
||||
func BuildLazyEvaluator(evalFunc EvalFunc, initState Any) func() Any {
|
||||
retValChan := make(chan Any)
|
||||
loopFunc := func() {
|
||||
var actState Any = initState
|
||||
var retVal Any
|
||||
for {
|
||||
retVal, actState = evalFunc(actState)
|
||||
retValChan <- retVal
|
||||
}
|
||||
}
|
||||
retFunc := func() Any {
|
||||
return <-retValChan
|
||||
}
|
||||
go loopFunc()
|
||||
return retFunc
|
||||
}
|
||||
|
||||
func BuildLazyUInt64Evaluator(evalFunc EvalFunc, initState Any) func() uint64 {
|
||||
ef := BuildLazyEvaluator(evalFunc, initState)
|
||||
return func() uint64 {
|
||||
return ef().(uint64)
|
||||
}
|
||||
}
|
||||
/* Output:
|
||||
Fib nr 0: 0
|
||||
Fib nr 1: 1
|
||||
Fib nr 2: 1
|
||||
Fib nr 3: 2
|
||||
Fib nr 4: 3
|
||||
Fib nr 5: 5
|
||||
Fib nr 6: 8
|
||||
Fib nr 7: 13
|
||||
Fib nr 8: 21
|
||||
Fib nr 9: 34
|
||||
*/
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Any interface{}
|
||||
type EvalFunc func(Any) (Any, Any)
|
||||
|
||||
func main() {
|
||||
fibFunc := func(state Any) (Any, Any) {
|
||||
os := state.([]uint64)
|
||||
v1 := os[0]
|
||||
v2 := os[1]
|
||||
ns := []uint64{v2, v1 + v2}
|
||||
return v1, ns
|
||||
}
|
||||
fib := BuildLazyUInt64Evaluator(fibFunc, []uint64{0, 1})
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Printf("Fib nr %v: %v\n", i, fib())
|
||||
}
|
||||
}
|
||||
|
||||
func BuildLazyEvaluator(evalFunc EvalFunc, initState Any) func() Any {
|
||||
retValChan := make(chan Any)
|
||||
loopFunc := func() {
|
||||
var actState Any = initState
|
||||
var retVal Any
|
||||
for {
|
||||
retVal, actState = evalFunc(actState)
|
||||
retValChan <- retVal
|
||||
}
|
||||
}
|
||||
retFunc := func() Any {
|
||||
return <-retValChan
|
||||
}
|
||||
go loopFunc()
|
||||
return retFunc
|
||||
}
|
||||
|
||||
func BuildLazyUInt64Evaluator(evalFunc EvalFunc, initState Any) func() uint64 {
|
||||
ef := BuildLazyEvaluator(evalFunc, initState)
|
||||
return func() uint64 {
|
||||
return ef().(uint64)
|
||||
}
|
||||
}
|
||||
|
||||
/* Output:
|
||||
Fib nr 0: 0
|
||||
Fib nr 1: 1
|
||||
Fib nr 2: 1
|
||||
Fib nr 3: 2
|
||||
Fib nr 4: 3
|
||||
Fib nr 5: 5
|
||||
Fib nr 6: 8
|
||||
Fib nr 7: 13
|
||||
Fib nr 8: 21
|
||||
Fib nr 9: 34
|
||||
*/
|
||||
|
Reference in New Issue
Block a user