小菜简单整理慕课网上的免费教学视频,Go语言第一课https://www.imooc.com/learn/345 ,如果大家有时间,可以去听听。这里只是简单整理。
Go常用概念和定义
1.工作区和GOPATH
(1).工作区:放置Go源码文件目录,一般情况下,Go源码文件都需要存放到工作区中(但是对于命令源码文件来说,这不是必须的)
(2).$GOPATH:$GOPATH是Go命令依赖一个重要的环境变量;GOPATH
允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号;
,Linux系统是冒号:
(3).工作区结构
/home/hypermind/golib:
|
|-src #src:用于存放源码(比如:.go .c .h .s等)
|
|-pkg #pkg:用于存放归档文件(名称以.a为后缀的文件),所有归档文件都会被存放到该目录的平台相关目录中,同样以代码包为组织形式
| #平台相关目录:两个隐含的Go语言环境变量GOOS 和 GOARCH,以$GOOS_$GOARCH 为命名方式:如 linux_amd64
|
|-bin #用于存放当前工作区中的Go程序的可执行文件
#注:1.当环境变量GOBIN已有效设置时,该目录会变的无意义
# 2.当GOPATH的值包含多个工作区的路径时,必须设置GOBIN,否则无法成功安装Go程序的可执行文件
2.源码文件的分类和含义
(1).Go源码文件:名称以.go为后缀,内容以Go语言代码组织的文件,多个源码文件是以代码包组织起来的。
(2).源码文件分三类,命令源码文件、库源码文件、测试源码文件
1.命令源码文件
● 声明自己属于main代码包,包含无参数声明和结果声明的main函数
● 被安装后,相应的可执行文件会被存放到GOBIN指向的目录或<当前工作区目录>/bin下当前工作区目录>
2.库源码文件
● 不具备命令源码文件的那两个特征的源码文件
● 被安装后,相应的归档文件会被存放到<当前工作区目录>/pkg/<平台相关目录下>平台相关目录下>当前工作区目录>
3.测试源码文件
● 不具备命令源码文件的那两个特征的源码文件,名称以 _test.go后缀
● 测试源码文件其中至少有一个函数名称以Test(功能测试函数) 或 Benchmark(基准测试函数或性能测试函数)为前缀,并且,该函数接受一个类型为 *testing.T 或 *testing.B的参数
3.代码包
(1).作用
● 编译和归档Go程序的最基本单位
● 代码划分、集结和依赖的有效组织形式,也是权限控制的辅助手段
(2).规则
● 一个代码包实际上就是一个由导入路径代表的目录
● 导入路径即<工作区目录>/pkg/<平台相关目录>之下的某段子路径平台相关目录>工作区目录>
(3).声明
● 每个源码文件必须声明其所属的代码包
● 同一个代码包中的所有文件声明的代码包应该是相同的
(4).声明代码包声明与代码包导入路径区别
● 代码包声明语句中的包名称应该是该代码包的导入路径的最右子路径 例:hypermind.cn/pkgtool 导入 package pkgtool
(5).代码包导入
● 代码包导入语句中使用的包名称应该与其导入路径一致。
import(
flag "flag",
aaaa ==> "aaaa",
bbbb "bbbb"
)
//带别名的导入
import str "string" //调用 str.HasPrefix("abc","a")方法
//本地化导入
import . "string" //直接调用方法HasPrefix("abc","a"),不需要写前缀
//仅初始化
import _ "string" //仅执行代码包的初始化函数,并不执行函数实体
(6).代码包初始化
● 代码包初始化函数即:无参数声明和结果声明的init函数
● init函数可以被声明在任何文件中,且可以有多个
● init 函数执行顺序:代码包对所有全局变量进行求值后,执行所有的init函数,当init函数有多个,init执行顺序是不能确定的。
go 命令
4.go run命令
执行go run 参数 goFileName.go
参数 | 说明 |
---|
-a | 强制编译相关代码,不论它们的编译结果是否已是最新的 |
-n | 打印编译过程中所需要运行的命令,但不真正执行它们 |
-p n | 并行编译,其中n为并行的数量 |
-v | 列出被编译的代码包名称 |
-a -v | 列出所有被编译的代码包的名称 |
-work | 显示编译时创建的临时工作目录的路径,并且不删除它 |
-x | 打印编译过程中所需要运行的命令,并执行它们 |
5.go build命令
执行 go build 参数
说明:
● 用于编译源码文件或代码包
● 编译非命令源码文件不会产生任何结果文件
● 编译命令源码文件会在该命令的执行目录中生成一个可执行文件
● 执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并编译
● 执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被编译
● -a 标记后所有涉及到的代码包都会被重新编译
6.go install命令
执行 go install
说明:
● 用于编译并安装代码包或源码文件
● 安装代码包会在当前工作区的pkg/<平台相关目录>下生成归档文件
● 安装命令源码文件会在当前工作区的bin目录或$GOBIN目录下生成执行文件平台相关目录>
● 执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并安装
● 执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被安装
● 执行该命令且以命令源码文件及相关库源码文件作为参数时,只有这些文件会被编译并安装
7.go get命令
执行 go get 参数
说明:
● 用于从远程代码仓库(如github)上下载并安装代码包
● 受支持的代码版本控制系统有:Git、Mercurial(hg)、SVN、Bazaar ● 指定的代码包会被下载到$GOPATH 中包含的第一个工作区的src目录中
参数 | 说明 |
---|
-d | 只执行下载动作,而不执行安装动作 |
-fix | 在下载代码包后执行修正动作,而后再进行编译和安装 |
-u | 利用网络来更新已有的代码包及依赖包 |