前言
代码中有演示,这里不多说。
代码
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编译器已经内置好了,而返回函数我们需要定义函数的形式,即确定参数和返回值,最后直接构造个匿名函数返回就行。
文章通过一个Go语言的代码示例展示了如何将函数作为返回值,解释了如何根据传入的常量(iota)返回不同的比较函数。在default情况下,如果参数错误,会返回一个错误。这种方式与返回基本类型相似,只是需要定义函数的参数和返回类型,并用匿名函数构建返回值。

被折叠的 条评论
为什么被折叠?



