1.工作区和GOPATH
一般情况下,工作区用来放置GO源码文件
#工作区习惯目录
/home/zyz/godemo
src/ 存放源码,以代码包组织
pkg/ 存放归档文件和平台相关目录(.a文件)
bin/ 存放当前工作区中go程序可执行文件
#设置环境变量
GOPATH=/home/zyz/godemo
PATH=$PATH;/home/zyz/godemo/bin
2.源码文件分类和含义
- 测试源码文件
//其中至少有一个函数的名称以Test或Benchmark为前缀
//并且,该函数接受一个类型为*testing.T或*testing.B的参数
func TestFind(t *testing.T) {
//功能测试函数
...
}
func BenchmarkFind(b *testing.B) {
//性能测试函数/基准测试函数
...
}
3.代码包相关知识
代码包作用和规则
- 代码包作用
编译和归档GO程序的基本单位 - 代码包规则
实际是一个由导入路径代表的目录
代码包定义
- 代码包声明
每一个源码文件都必须声明所属的代码包,同一个代码包中所有源码文件声明的代码包应该相同
// calc/add.go
package calc
func Add(x, y int) int {
return x + y
}
// calc/sub.go
package calc
func Sub(x, y int) int {
return x - y
}
代码包导入
//方法一
import {
"fmt"
"strings"
}
//方法二:带别名导入
import str "strings"
//方法3:本地化导入
import . "strings"
//方法4:匿名导入
import _ "strings"
//方法5:自定义代码包导入
//import calc
import customcalc "zyz.github.com/study/calc"
代码包初始化
代码包初始化函数即:无参数声明和结果声明的init函数
init函数可以被声明在任何文件中,且可以有多个,在导入包的时候会全部执行
//add.go
package calc
import "fmt"
func Add(x, y int) int {
return x + y
}
//init函数可以有多个
func init() {
fmt.Println("自动执行1...")
}
func init() {
fmt.Println("自动执行2...")
}
//sub.go
package calc
import "fmt"
func Sub(x, y int) int {
return x - y
}
//init函数可以有多个
func init() {
fmt.Println("自动执行3...")
}
func init() {
fmt.Println("自动执行4...")
}
//main.go
package main
import _ "zyz.github.com/study/calc"
func main() {
}
输出结果
自动执行1...
自动执行2...
自动执行3...
自动执行4...
4.常用命令
-
go run
-a 强制编译相关代码,忽略最新的结果
-n 打印编译过程中所需运行的命令,但不执行
-p n 并行编译,n为并行的数量
-v 列出被编译的代码包的名称
-work 显示编译时创建的临时工作目录路径,并且不删除
-x 打印编译过程中所需运行的命令,并执行 -
go build 编译源码文件或代码包
-
go install 编译并安装代码包或源码文件