中禁止重新定义语言,所以 rsc 不能直接这么干。

因此将会由用户自己决定控制这个 “破坏”,方式将会是根据每个包的 go.mod 文件中的 go 行更改语义。

如果我们是在 Go1.30 对本文讨论的 for 循环改为迭代,那么在 go.mod 文件中的 go 版本声明是将是一个关键。

如下图示:

Go语言中的for循环有多坑?

Go 1.30 或更高版本将会每次迭代变量,而早期 Go 版本的将每次循环变量。

如此一来上述提到的 for 循环问题都会在一定范围内被解决。

总结

for 循环时的变量问题,一直是各大 Go 考官爱考的题目,另外也确实在实际编程 Go 代码时会遇到这类坑。

虽然 rsc 希望在 go.mod 文件上开创先河,利用 go 版本的声明,去修改语义(不允许添加和删除)。这无疑是给 Go1 兼容性保障开了一个后门。

如果实施,本次变更会导致 Go 的前后版本语义有所不同。还不如变成一个 go.mod 文件的一个语义开关。

这显然是一个很折腾的思考题。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。