package mainimport "fmt"func main() {s := "gopher"fmt.Println("Hello and welcome, %s!", s)for i := 1; i <= 5; i++ {fmt.Println("i =", 100/i)}
}
运行结果如下:
-
第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
-
下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
-
下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
-
在Go语言中,:= 是一个短变量声明操作符,它用于在函数内部声明一个新的变量并为其赋值。这个操作符会根据所赋值的表达式的类型自动推断变量的类型。下面是操作符的一些细节:
1. 类型推断::=操作符会自动推断变量的类型。例如,如果你使用:=声明一个变量并赋值为`42`,那么这个变量的类型将会是`int`。
2. 作用域:使用`:=`声明的变量只在声明它的函数或代码块中有效。它们不能在函数外部访问。
3. 初始化:使用`:=`声明的变量必须被初始化,也就是说,你不能只声明而不赋值。
4. 左值和右值:在Go语言中,左值是可以被赋值的表达式,而右值是临时的值。使用`:=`声明的变量是左值,这意味着你可以在之后对它们进行赋值操作。
5. 变量重声明:如果你在一个函数中已经使用`var`关键字声明了一个变量,你不能再使用`:=`来重新声明同一个变量。但是,你可以使用`:=`来重新赋值给已经声明的变量。
6. 与var关键字的区别:`var`关键字用于在函数的顶部声明全局变量或者在函数内部声明变量,但不会自动推断类型。使用`var`声明的变量如果没有初始化,它们的值将是该类型的零值(例如,`int`类型的零值是`0`)。
7. 性能:在某些情况下,使用`:=`可能会比`var`关键字稍微快一点,因为编译器可以优化掉类型推断的过程。
在代码示例中,s := "gopher"这一行就是使用`:=`来声明并初始化一个名为`s`的字符串变量,其值为`"gopher"`。这个变量`s`只在`main`函数内部有效。