V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
TenTo
V2EX  ›  Go 编程语言

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

  •  
  •   TenTo · 2017-04-12 20:23:26 +08:00 · 1565 次点击
    这是一个创建于 2788 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如下的代码:

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

    为什么 1 和 2 会不同?

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

    感觉更可能是包级变量和函数一个待遇,允许定义之后不使用
    sagaxu
        5
    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
        6
    TenTo  
    OP
       2017-04-12 20:54:01 +08:00
    @sagaxu 谢谢,确实是这样。我刚查到你说的这个:https://golang.org/ref/spec#Variable_declarations 。好像也有其他人问过类似的问题:https://github.com/golang/go/issues/222
    是我钻牛角尖了,其实就是语言定义的行为。
    penjianfeng
        7
    penjianfeng  
       2017-04-12 23:10:28 +08:00
    全局变量是不存在这个问题的, golang 官方 spec 上有说,多看看文档
    itfanr
        8
    itfanr  
       2017-04-13 01:55:47 +08:00
    和变量的存储分配方式有关系吧。一个是栈,一个是静态存储空间。
    jeffersonpig
        9
    jeffersonpig  
       2017-04-13 08:41:03 +08:00
    go 的各种限制就是奇奇怪怪的
    mason961125
        10
    mason961125  
       2017-04-13 13:45:06 +08:00
    建议写 Go 的时候能够用 IDE 或 编辑器+插件,这样能够提示不常见的语法错误。
    mengzhuo
        11
    mengzhuo  
       2017-04-13 19:12:01 +08:00
    函数里的变量声明了没使用,编译器会报错
    fryderyk
        12
    fryderyk  
       2017-04-13 23:41:45 +08:00
    从汇编 /C/Pascal 之类过来的就很清楚的,@itfanr 正解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:23 · PVG 14:23 · LAX 22:23 · JFK 01:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.