go 语言就很离谱

2020-10-29 11:42:08 +08:00
 leeraya

居然还有 func type 这种东西。今天遇到要循环生成 type func 的对象: type FieldResolveFn func(p ResolveParams) (interface{}, error)

结果循环生成的 func 都是一样的,最后都变成可最后生成的那一个。 该怎么解决啊,老哥们

10929 次点击
所在节点    Go 编程语言
64 条回复
lookbackagain
2020-10-29 13:58:31 +08:00
这么基础的问题,怪 go 语言就离谱
yufpga
2020-10-29 14:00:09 +08:00
// 自己细品
for index, name1 := range nameArr {
test[index] = func(i int, name1 string) Greeting {
return func(name string) string {
fmt.Println("hello " + name + name1 + strconv.Itoa(i))
return "hello " + name + name1 + strconv.Itoa(i)
}
}(index, name1)
}
KaynW
2020-10-29 14:06:25 +08:00
??? 这问题还能怪 Go 啊?
gowk
2020-10-29 14:06:46 +08:00
滚!
gowk
2020-10-29 14:10:47 +08:00
忘加狗头了
mrgeneral
2020-10-29 14:18:41 +08:00
一个帖子多重反转。
看标题我就知道要引战了。
看内容没想到连代码都没贴就开始提问题了,得学习下「如何提问」
看了贴出来的代码,没想到是一个很基础的问题,得学习下「 The Go Programming Language 」。

但凡认真学习下也不会踩这个坑: https://book.douban.com/subject/27044219/ 书里说的很明白。

最后,其实是楼主标题党了。
realbender
2020-10-29 14:23:11 +08:00
去面试这样子笔试都过不了的
yaphets666
2020-10-29 14:26:55 +08:00
javascript 这有类似的问题
JerryChan31
2020-10-29 14:28:05 +08:00
这贴是对 Cunningham's Law 的伟大实践(手动狗头
vZexc0m
2020-10-29 15:07:52 +08:00
@hakono #14 但是为什么 test 内部三个函数的地址却还是一样的呢
ghjacky
2020-10-29 15:10:38 +08:00
你这不是 go 的问题吧,这是对编程里边的 for 循环有异议?
GopherDaily
2020-10-29 15:14:28 +08:00
怪我,不用说了
chengyunbo
2020-10-29 15:16:46 +08:00
新手上路基本都会碰到这个坑,特别是从 PHP 转过来的,趟坑多了,慢慢体会,我已经趟了一路了。
zu1k
2020-10-29 15:26:13 +08:00
看了一遍,又浪费时间了
hakono
2020-10-29 16:22:22 +08:00
@vZexc0m 涉及到底层所以不是非常了解,但从理解上来说,闭包调用的时候函数定义和环境是分开的,所以环境虽然不同,但是指向的都是同一个地址
yuhaoyuhao
2020-10-29 16:44:16 +08:00
@vZexc0m 我觉得应该算是一种编译器优化。
index90
2020-10-29 16:46:16 +08:00
@vZexc0m 函数地址肯定都是一样的呀,了解一下 linux 进程内存模型,函数都在代码段里。

编码时候看起来是函数是个变量,实际上只有一个函数的代码段,函数内的变量实际上是参数。
wellsc
2020-10-29 16:50:43 +08:00
这个坑就离谱
victor
2020-10-29 16:57:09 +08:00
基础差不要紧,请用 https://github.com/kyoh86/scopelint 检查 range 的写法。
kkbblzq
2020-10-29 16:57:40 +08:00
这个贴就很离谱

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX