go 语言就很离谱
居然还有 func type 这种东西。今天遇到要循环生成 type func 的对象: type FieldResolveFn func(p ResolveParams) (interface{}, error)
结果循环生成的 func 都是一样的,最后都变成可最后生成的那一个。 该怎么解决啊,老哥们
居然还有 func type 这种东西。今天遇到要循环生成 type func 的对象: type FieldResolveFn func(p ResolveParams) (interface{}, error)
结果循环生成的 func 都是一样的,最后都变成可最后生成的那一个。 该怎么解决啊,老哥们
test := make([]Greeting, 3)
nameArr := []string{“lee”, “ray”, “Pool”}
for index, name1 := range nameArr {
// if index == 0 {
// test[index] = func(name string) string {
// fmt.Println(“hello ” + name + name1 + strconv.Itoa(index))
// return “hello ” + name + name1 + strconv.Itoa(index)
// }
// } else {
// test[index] = func(name string) string {
// fmt.Println(“hello ” + name + name1 + strconv.Itoa(index))
// return “hello ” + name + name1 + strconv.Itoa(index)
// }
// }
test[index] = func(name string) string {
fmt.Println(“hello ” + name + name1 + strconv.Itoa(index))
return “hello ” + name + name1 + strconv.Itoa(index)
}
}
}
debug 看 test 数组,元素都是一样的
https://studygolang.com/articles/14696
“`
for index := range nameArr {
tmpName := nameArr[index]
test[index] = func(name string) string {
fmt.Println(“hello ” + name + tmpName + strconv.Itoa(index))
return “hello ” + name + tmpName + strconv.Itoa(index)
}
}
“`
改成这样就行了
关于 for range 这个, 我一般是不太喜欢使用 for idx, value := slice1 的写法的, 因为 value 是指的拷贝,每次循环都要拷贝一遍,大量循环的时候性能会有影响,所以默认都是 for idx := slice1 这样
但凡认真学习下也不会踩这个坑: https://book.douban.com/subject/27044219/ 书里说的很明白。
最后,其实是主标题党了。
编码时候看起来是函数是个变量,实际上只有一个函数的代码段,函数内的变量实际上是参数。
————-
计算机就是离谱
人类就是离谱
地球就是离谱
银河系就是离谱
宇宙就是离谱
大爆炸就是离谱