Go 关于变量定义及使用的问题

2017-04-12 20:23:26 +08:00
 TenTo

如下的代码:

package main

//1.这里不会造成编译不通过
var data int

func main(){
    //2.这里定义不使用编译不通过
    // var data int
}

为什么 1 和 2 会不同?

1408 次点击
所在节点    Go 编程语言
12 条回复
rrfeng
2017-04-12 20:32:00 +08:00
因为 1 是 package 级别的?
TenTo
2017-04-12 20:34:44 +08:00
@rrfeng 不知道,查了 golang.org 也没有详细解释。看很多关于 go 的书,都只说了情况 2 ,但是没有解释为什么情况 1 是可以的。有点语焉不详。
Immortal
2017-04-12 20:35:01 +08:00
任意 函数\方法 里面定义了不用都会编译不通过
popu111
2017-04-12 20:41:08 +08:00
1 位置是个全局变量所以不好检查?

感觉更可能是包级变量和函数一个待遇,允许定义之后不使用
sagaxu
2017-04-12 20:41:48 +08:00
Implementation restriction: A compiler may make it illegal to declare a variable inside a function body if the variable is never used.
TenTo
2017-04-12 20:54:01 +08:00
@sagaxu 谢谢,确实是这样。我刚查到你说的这个:https://golang.org/ref/spec#Variable_declarations 。好像也有其他人问过类似的问题:https://github.com/golang/go/issues/222
是我钻牛角尖了,其实就是语言定义的行为。
penjianfeng
2017-04-12 23:10:28 +08:00
全局变量是不存在这个问题的, golang 官方 spec 上有说,多看看文档
itfanr
2017-04-13 01:55:47 +08:00
和变量的存储分配方式有关系吧。一个是栈,一个是静态存储空间。
jeffersonpig
2017-04-13 08:41:03 +08:00
go 的各种限制就是奇奇怪怪的
mason961125
2017-04-13 13:45:06 +08:00
建议写 Go 的时候能够用 IDE 或 编辑器+插件,这样能够提示不常见的语法错误。
mengzhuo
2017-04-13 19:12:01 +08:00
函数里的变量声明了没使用,编译器会报错
fryderyk
2017-04-13 23:41:45 +08:00
从汇编 /C/Pascal 之类过来的就很清楚的,@itfanr 正解

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

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

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

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

© 2021 V2EX