如下的代码:
package main
//1.这里不会造成编译不通过
var data int
func main(){
//2.这里定义不使用编译不通过
// var data int
}
为什么 1 和 2 会不同?
如下的代码:
package main
//1.这里不会造成编译不通过
var data int
func main(){
//2.这里定义不使用编译不通过
// var data int
}
为什么 1 和 2 会不同?
|
rrfengApr 12, 2017
1
因为 1 是 package 级别的?
|
|
2
@rrfeng 不知道,查了 golang.org 也没有详细解释。看很多关于 go 的书,都只说了情况 2 ,但是没有解释为什么情况 1 是可以的。有点语焉不详。
|
|
ImmortalApr 12, 2017
3
任意 函数\方法 里面定义了不用都会编译不通过
|
|
popu111Apr 12, 2017
4
1 位置是个全局变量所以不好检查?
感觉更可能是包级变量和函数一个待遇,允许定义之后不使用 |
|
sagaxuApr 12, 2017
5
Implementation restriction: A compiler may make it illegal to declare a variable inside a function body if the variable is never used.
|
|
6
@sagaxu 谢谢,确实是这样。我刚查到你说的这个:https://golang.org/ref/spec#Variable_declarations 。好像也有其他人问过类似的问题:https://github.com/golang/go/issues/222
是我钻牛角尖了,其实就是语言定义的行为。 |
|
penjianfengApr 12, 2017
7
全局变量是不存在这个问题的, golang 官方 spec 上有说,多看看文档
|
|
itfanrApr 13, 2017
8
和变量的存储分配方式有关系吧。一个是栈,一个是静态存储空间。
|
|
jeffersonpigApr 13, 2017
9
go 的各种限制就是奇奇怪怪的
|
|
mason961125Apr 13, 2017
10
建议写 Go 的时候能够用 IDE 或 编辑器+插件,这样能够提示不常见的语法错误。
|
|
mengzhuoApr 13, 2017
11
函数里的变量声明了没使用,编译器会报错
|
|
fryderykApr 13, 2017
12
从汇编 /C/Pascal 之类过来的就很清楚的,@itfanr 正解
|