潇湘沐
您可以通过定义函数类型然后向其添加方法来更进一步。package mainimport "fmt"type Add func(int, int) intfunc (f Add) Apply(i int) func(int) int { return func(j int) int { return f(i, j) }}func main() { var add Add = func(i, j int) int { return i + j } add3 := add.Apply(3) fmt.Println("add 3 to 2:", add3(2))}您甚至可以尝试使用可变参数函数:package mainimport "fmt"type Multiply func(...int) intfunc (f Multiply) Apply(i int) func(...int) int { return func(values ...int) int { values = append([]int{i}, values...) return f(values...) }}func main() { var multiply Multiply = func(values ...int) int { var total int = 1 for _, value := range values { total *= value } return total } var times2 Multiply = multiply.Apply(2) fmt.Println("times 2:", times2(3, 4), "(expect 24)") // ... and you can even cascade (if assigned the Multiply type) times6 := times2.Apply(3) fmt.Println("times 6:", times6(2, 3, 5, 10), "(expect 1800)")}希望这可以帮助!