0-总叙
特性
- 简化问题,易于学习
- 内存管理,简洁语法,易于使用
- 快速编译,高效开发
- 高效执行
- 并发支持,轻松驾驭
- 静态类型
- 标准类库,规范统一
- 易于部署
- 文档全面
- 免费开源
环境变量
- GOROOT:Go的安装位置,默认
$HOME/go
- GOPATH:工作目录,在这下面写代码
- GOOS:运行Go的操作系统;[darwin | freebsd | linux | windows]
- GOARCH:运行Go的处理器架构;[386 | amd64 | arm]
- GOBIN:编译器和链接器的安装位置,默认
$GOROOT/bin
- GOARM:专门针对基于 arm 架构的处理器,默认为 6;[5 | 6]
Hello World
// src/Hello/main.go
package main // 声明 mian 包,表明当前是一个可执行程序
import "fmt" // 导入内置 fmt 包
func main() { // main 函数,程序执行入口
fmt.Println("Hello World!") // 在终端打印 Hello World!
}
package main
定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。
package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。import "fmt"
告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。func main()
是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行 init() 函数)。fmt.Println(...)
可以将字符串输出到控制台,并在最后自动增加换行字符 \n。使用 fmt.Print(“hello, world\n”) 可以得到相同的结果。
- 在 Go 中,左大括号不能单独一行,这会编译不了
- 对缩进没有要求,可以用
go fmt 文件名.go
命令将文件格式化 - 每个语句独占一行,不需要加分号
- 大部分语句只能写在 {} 内, {} 外只能做一些声明变量、函数、结构体的工作。
- 变量声明了不使用也是不允许的
运行
在文件目录下,可以运行 go build
命令,编译之后会在目录下生成一个可执行文件 Hello.exe
,输入文件名即可以运行。
$ go build
$ ./Hello
Hello World!
如果不在文件目录下,也可以使用 go build 项目名称
命令,编译之后会在所在目录下生成一个可执行文件 Hello.exe
。
$ cd ..
$ go build Hello
$ ./Hello
Hello World!
也可以使用 -o 参数来指定可执行文件的名字
$ go build -o haha.exe
$ ./haha
Hello World!
还可以使用 go run 文件名.go
命令来执行,但不会生成可执行文件。
$ cd src/Hello
$ go run main.go
Hello World!
init 函数
每个源文件都只能包含一个 init 函数。
它不能被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。
可以将数据检验或修复的工作放在 init函数中,这样程序开始执行之前就会先修复或检验数据,保证程序状态正确性。
package main
import (
"fmt"
"math"
)
var Pi float64
func init() {
Pi = 4 * math.Atan(1)
fmt.Println("init()")
}
func main() {
fmt.Println("main()")
}
输出:
$ go run main.go
init()
main()
$