Golang|使用函数作为参数和使用接口的联系
- 函数作为数据类型的一种,可以成为其他函数的参数。
- 在 Go(Golang) 中,函数作为参数 和 接口(interface),本质上都和抽象、灵活调用有关 —— 都是让代码更灵活、更可扩展的手段。
- 不过它们各有侧重,联系在于:
- 都是用来传递“行为”或“能力”,而不是传递具体的数据。
- 本质上都是一种“面向抽象编程” —— 只关心"做什么",不关心"具体怎么做"。
// Go把函数当成一种一等公民(first-class citizen),你可以像传递变量一样传递函数。package mainimport "fmt"// 函数作为参数
func operate(a, b int, op func(int, int) int) int {return op(a, b)
}func add(x, y int) int {return x + y
}func main() {result := operate(3, 4, add)fmt.Println(result) // 输出 7
}
// 接口定义的是一组方法的集合。任何类型,只要实现了这些方法,就可以被赋值给接口变量。package mainimport "fmt"// 定义一个接口
type Operator interface {Operate(a, b int) int
}// 一个实现了 Operator 接口的类型
type AddOperator struct{}func (AddOperator) Operate(a, b int) int {return a + b
}func compute(a, b int, op Operator) int {return op.Operate(a, b)
}func main() {add := AddOperator{}result := compute(3, 4, add)fmt.Println(result) // 输出 7
}