package main
import "fmt"
type sumFuncType func(int, int) int
func main() {
var add sumFuncType = func(a, b int) int {
return a + b
}
fmt.Println(add(1, 2))
}
闭包
package main
import "fmt"
func calculator(x int) func(int) int {
return func(y int) int {
return x + y
}
}
func main() {
counter := calculator(1)
bill := counter(2)
fmt.Println(bill)
counter = calculator(bill)
bill = counter(3)
fmt.Println(bill)
}
函数构造器
package main
import (
"bufio"
"fmt"
"io"
"math/rand"
"strings"
)
type GenerateRandom func() int
func RandomSum() GenerateRandom {
a, b := rand.Intn(10), rand.Intn(20)
return func() int {
a, b = b, a+b
return a
}
}
func (g GenerateRandom) Read(p []byte) (n int, err error) {
next := g()
if next > 21 {
return 0, io.EOF
}
s := fmt.Sprintf("%d\n", next)
return strings.NewReader(s).Read(p)
}
func PrintResult(reader io.Reader) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
func main() {
r := RandomSum()
PrintResult(r)
}