go语言的函数类型
函数在go语言中也是一种变量,我们是通过type来自定义类型的,函数的类型是所拥有的相同参数与相同返回值的一种函数类型
函数作为类型的最大好处在于可以把这个类型的函数当做值来传递,下面是kubesphere的一个sliceutil的例子:
package main
import "fmt"
func removeString(slice []string, remove func(item string) bool) []string {
for i := 0; i < len(slice); i++ {
if remove(slice[i]) {
slice = append(slice[:i], slice[i+1:]...)
}
}
return slice
}
func main() {
s := make([]string,0)
s = append(s, "1","2","3","4","5")
afterRemove := removeString(s, func(item string) bool {
return item == "3"
})
fmt.Println(afterRemove)
}
output:
[1 2 4 5]
我们在传入一个函数作为参数给removeString,这个函数提供了判断是否要删除的依据,这样我们就可以很灵活的提供这个删除的依据了。看下面的改法
func main() {
s := make([]string,0)
s = append(s, "1","2","3","4","5")
afterRemove := removeString(s, func(item string) bool {
return item == "3" || item == "5"
})
fmt.Println(afterRemove)
}
output:
[1 2 4]
我们把入参函数的逻辑改动一下,输出结果就会改变,这样是不是很方便,不需要改remove的逻辑,把判断删除的依据从执行逻辑中抽离出来,在开发中根据自己的实际需求灵活变化。