go使用闭包处理数据
闭包的用处
闭包就是一个匿名函数,可以用来处理结构体返回值的封装,数值的比较等等
结构体返回值的封装
package main
import (
"fmt"
"strconv"
)
type Example struct {
Options []string
}
func main() {
//1
fmt.Println(&Example{
Options: func() []string { //2
strs := []string{}
for i := 0; i < 3; i++ {
strs = append(strs, "hello"+strconv.Itoa(i))
}
return strs
}(),
})
}
如代码所示,想要给options赋值可以通过在1处定义一个变量赋值的方式,或者2处用闭包函数直接返回一个字符串的形式赋值,有时为了代码的规整性,可能选择2这种方式比较好一点,或者一些不太适宜1处样式赋值的场景选择2处赋值方式也是比较合理的
数值比较
type funcptr func(s string,strs []string) bool
func compare(s string,strs []string,funcptr2 funcptr) bool{
return funcptr2(s,strs)
}
通过定义compare函数,传入funcptr2函数指针对应的匿名函数,类似于sort.slice()方法,在匿名函数中指定处理逻辑,然后根据返回的flag或者其他值做后续的处理
综上就是我目前所理解的闭包的两种常用方式,理解起来简单,但是使用的话还是需要比较多的技巧的