前言
代码中有演示,这里不多说。
代码
package main
import (
"errors"
"fmt"
)
// 函数类别
const (
Greater = iota // 0
Less // 1
)
// 函数做 返回值
func getCompare(mtype int) (func(int, int) bool, error) {
switch mtype {
case Greater:
return func(a int, b int) bool {
return a > b
}, nil
case Less:
return func(a int, b int) bool {
return a < b
}, nil
default:
return nil, errors.New("参数错误!")
}
}
func main() {
f, err := getCompare(Greater) // Greater 换成 0 , 效果一样
if err != nil {
fmt.Println(err)
return
}
a, b := 2, 3
println("a > b ? ", f(a, b)) // a > b ?
}
总结
我们发现函数做返回值,和正常的int、string做返回值也没有多大区别。无非就是int、string编译器已经内置好了,而返回函数我们需要定义函数的形式,即确定参数和返回值,最后直接构造个匿名函数返回就行。