Golang Go语言中关于变量定义及使用的问题
如下的代码:
package main
//1.这里不会造成编译不通过
var data int
func main(){
//2.这里定义不使用编译不通过
// var data int
}
为什么 1 和 2 会不同?
Golang Go语言中关于变量定义及使用的问题
因为 1 是 package 级别的?
更多关于Golang Go语言中关于变量定义及使用的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不知道,查了 golang.org 也没有详细解释。看很多关于 go 的书,都只说了情况 2 ,但是没有解释为什么情况 1 是可以的。有点语焉不详。
任意 函数\方法 里面定义了不用都会编译不通过
1 位置是个全局变量所以不好检查?
感觉更可能是包级变量和函数一个待遇,允许定义之后不使用
Implementation restriction: A compiler may make it illegal to declare a variable inside a function body if the variable is never used.
谢谢,确实是这样。我刚查到你说的这个:https://golang.org/ref/spec#Variable_declarations 。好像也有其他人问过类似的问题:https://github.com/golang/go/issues/222
是我钻牛角尖了,其实就是语言定义的行为。
全局变量是不存在这个问题的, golang 官方 spec 上有说,多看看文档
和变量的存储分配方式有关系吧。一个是栈,一个是静态存储空间。
go 的各种限制就是奇奇怪怪的
建议写 Go 的时候能够用 IDE 或 编辑器+插件,这样能够提示不常见的语法错误。
函数里的变量声明了没使用,编译器会报错
从汇编 /C/Pascal 之类过来的就很清楚的,@itfanr 正解
在Golang(Go语言)中,变量定义及使用是编程的基础。以下是关于Go语言中变量定义及使用的几个关键点:
-
变量声明与初始化:
- 使用
var
关键字声明变量。例如:var a int
。 - 可以在声明时直接初始化变量,如:
var a int = 10
或简写为var a = 10
(编译器会自动推断变量类型)。 - 对于简短声明,可以使用
:=
操作符,它只能在函数内部使用,如:a := 10
。
- 使用
-
变量类型:
- Go是静态类型语言,每个变量都有明确的类型,如
int
、float64
、string
等。 - 变量类型决定了其存储数据的格式和可进行的操作。
- Go是静态类型语言,每个变量都有明确的类型,如
-
变量作用域:
- 全局变量:在包级别声明,可在整个包中使用。
- 局部变量:在函数或代码块内部声明,仅在该作用域内有效。
-
常量:
- 使用
const
关键字声明常量,如:const Pi = 3.14
。 - 常量值在编译时确定,且不可修改。
- 使用
-
零值:
- Go语言中的变量在声明但未初始化时,会被赋予一个零值。例如,
int
类型的零值是0
,string
类型的零值是空字符串""
。
- Go语言中的变量在声明但未初始化时,会被赋予一个零值。例如,
理解这些基本概念对于编写健壮、高效的Go程序至关重要。希望这些信息能帮助你更好地掌握Go语言中的变量定义及使用。如果有更多具体问题,欢迎继续提问!