JIT(Just-In-Time)Compiler
是在程序开始运行以后,在执行过程中把代码(通常是字节码或虚拟机指令)转化成另外一种运行更快的指令,通常就是程序所在机器的CPU
指令集。与之相比,传统的编译器则会在程序运行之前就把所有代码编译成机器指令。
日期:2015年6月18日
Go语言“:=”用法浅析
Go
语言中可以使用“:=
”为一个新的变量完成声明以及初始化的工作,如下例所示:
i := 1
等价于:
var i = 1
要注意语句中没有变量类型,不是var i int = 1
。
“:=
”不能重新声明一个已经声明过的变量,如下例所示:
package main
import "fmt"
func main() {
var i = 1
i := 2
fmt.Println(i)
}
编译结果:
C:/Go\bin\go.exe run C:/Work/go_work/Hello.go
# command-line-arguments
.\Hello.go:8: no new variables on left side of :=
错误的原因是变量被重复声明了。
但使用“:=
”为多个变量赋值时,如果引入了至少一个新的变量,编译是可以通过的,如下例所示:
package main
import "fmt"
func main() {
var i = 1
i, err := 2, false
fmt.Println(i, err)
}
编译执行:
C:/Go\bin\go.exe run C:/Work/go_work/Hello.go
2 false
要注意这个时候,并没有重新声明“i
”变量,只是为之前声明的“i
”变量赋值。
“:=
”只能用在函数体中。它的一个重要用途是用在“if
”,“for
”和“switch
”语句的初始化,使变量成为一个“临时变量”,也就是变量的作用域仅限于这条语句。如下例所示:
package main
import "fmt"
func main() {
for j := 3; j <= 5; j++ {
fmt.Println(j)
}
fmt.Println(j)
}
编译结果:
C:/Go\bin\go.exe run C:/Work/go_work/Hello.go
# command-line-arguments
.\Hello.go:11: undefined: j
“j
”的声明作用域仅限于“for
”语句,所以编译第二个打印语句会出错。
参考资料:
(1)Short variable declarations;
(2)Assignment operator in Go language。