优雅的go语言--入门篇
1.特点
1.静态类型,编译型的开源语言
2.脚本华的语法,支持多种编程范式(函数式&面向对象)
3.原生,给力的并发编程的支持
2.优势
1.脚本化的语法
2.静态类型+编译型,程序运行速度有保障
3.原生支持并发编程(降低开发,维护成本。程序可以更好的执行)
3.劣势
1.语法糖并没有python和ruby那么多
2.目前的程序运行速度还不及c。但已经赶超c++和java
3.第三方函数库暂时不能像绝对主流的编程语言那样多
4.环境设置
1.goroot:安装目录
2.gopath:工作区
3.gobin:编译文件
5.工作区和gopath
1.工作区是放置go源码文件的目录
2.一般情况下,go源码文件都需要存放在工作区
3.对于命令源码文件,并不是必须的
4.工作区的目录:
0.平台相关目录
1.两个隐含的go语言环境变量
goos:操作系统
goarch:计算架构
2.以$goos_ $goarch 为命名方式,如darwin_amd64
1.src:
1.用于存放源码文件
2.以代码包为组织形式
2.pkg:
1.用于存放归档文件(名称以.a为后缀的文件)
2.所有归档文件都会被存放在pkg目录下的平台相关目录中,同样以代码包为组织形式
3.bin:
1.用于存放当前工作区中的go程序的可执行文件
2.失效:
1.当环境变量gobin已有效设置时,该目录会变的无意义
2.当gopath的值中包含多个工作区的路径时,必须设置gobin,否则无法成功安装go程序的可执行文件
6.源码文件的分类和含义
1.go源码文件
1.名称以.go为后缀,内容以go语言代码组织的文件
2.多个go源码文件是需要用代码包组织起来的
2.源码文件分类
1.命令源码文件,库源码文件:go语言程序
2.测试源码文件:辅助源码文件
3.命令源码文件
1.声明自己属于main代码包,包含无参数声明和结果声明的main函数
2.被安装后,相应的可执行文件会被存放到gobin指向的目录或 当前工作区目录的bin目录下
3.go程序的入口,但不建议把程序都写在一个文件中
4.同一个代码包中强烈不建议直接包含多个命令源码文件
4.库源码文件
1.不具备命令源码文件的特征的源码文件
2.被安装后,相应的归档文件会被存放到当 前工作区目录/pkg/平台相关目录 下
5.测试源码文件
1.与库源码文件类似
2.不具备命令源码文件的特征的源码文件
3.名称以_test.go为后缀
4.有测试函数:
1.至少有一个函数名称以test或benchmark为前缀
2.该函数接受一个类型为*testing.t或*testing.b的参数
3.示例:
func testfind(t *testing.t){ } //功能测试函数 func benchmarkfind(b *testing.b){ } //基准测试函数或性能测试函数
7.代码包的相关知识
1.代码包的作用
1.编译和归档的最基本单位
2.代码划分,集结和依赖的有效组织形式,也是权限控制的辅助手段
2.代码包的规则
1.一个代码包实际上就是一个由导入路径代表的目录
2.导入路径即 (工作区目录/src 或 工作区目录/pkg/平台相关目录) 之下的某段子目录
3.代码包的声明
1.每个源码文件必须声明其所属的代码包
2.同一个代码包中的所有源码文件声明的代码包应该是相同的
4.代码包声明与代码包导入路径的区别
1.代码包声明语句中的包名称应该是该代码包的导入路径的最右子路径
5.代码包导入
1.代码包导入语句中使用的包名称应该与其导入的路径一致
6.代码包导入方法
1.普通导入方法
import “strings”===> strings.hasprefix(“abc”,”a”)
2.带别名的导入
import str “strings”===>str.hasprefix(“abc”,”a”) //可以直接使用别名
3.本地化的导入
import . “strings”===>hasprefix(“abc”,”a”) //无需前缀,本地!!!
4.仅仅初始化
import _ “strings” //仅执行代码包中的初始化函数
7.代码包初始化
1.代码包初始化函数即:无参数声明和结果声明的init函数
2.init函数可以被声明在任何文件中,且可以有多个,同一代码包下多个init函数执行顺序是不确定的
3.init函数执行时机
1.单一代码包内:对所有全局函数进行求值===>执行所有init函数
2.不同代码包之间:执行被导入代码包中的init===>执行导入它的那个代码包的init函数
3. 4.每一个init函数只会被执行一次,init在main函数之前执行
8.命令基础
1.go run
1.用于运行命令源码文件
2.只能接受一个命令源码文件以及若干个库源码文件作为文件参数,程序只能有一个入口
3.其内部操作步骤是:先编译源码文件再运行
源码文件 —> 编译 —> 临时文件 —>运行 —>1. 可执行文件 2.归档文件
4.常用标记
1.-a :强制编译相关代码,不论它们的编译结果是否已是最新的,一般加上
2.-n :打印编译过程中所需的命令,但不真正执行它们
3.-p n :并行编译,n代表并行数量。n的值最好设置为当前cpu的逻辑cpu(所有cpu的核的总数量)的个数。加快编译速度
4.-v : 列出被编译的代码包的名称(不包含go语言自带的标准库的代码包)
5.-work :显示编译时创建的临时工作目录的路径,并且不删除此临时工作目录
6.-x :打印编译过程中所需运行的命令,并执行它们
2.go build
1.用于编译源码文件或代码包
2.编译非命令源码文件不会产生任何结果文件,只会检查源码文件的有效性
3.编译命令源码文件会在该命令的执行目录中生成一个可执行文件
4.执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并编译
5.执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被编译
6.执行该命令且以若干源码文件作为参数时,只有这些文件会被编
3.go install
1.用于编译并安装代码包或源码文件
2.安装代码包会在当前工作区的 pkg/平台相关目录 下生成归档文件
3.安装命令源码文件会在当前工作区的bin目录或$gobin目录下生成可执行文件
4.执行该命令且不追加任何参数时,它会试图把当前目录作为代码包并安装
5.执行该命令且以代码包的导入路径作为参数时,该代码包及其依赖会被安装
6.执行该命令且以命令源码文件及相关库源码文件作为参数时,只有这些文件会被编译并安装
4.go get
1.用于从远程仓库上下载并安装代码包 如:github,gitllab,gogs
2.受支持的代码版本控制系统:git,hg,svn,bazaar
3.指定的代码包会被带走到¥gopath中包含的第一个工作区的src目录中 4.常用标记
1.-d :直至下载工作,而不执行安装动作
2.-fix :在下载代码包之后先执行修正动作,而后再紧张编译和安装。主要为了消除版本不兼容
3.-u :利用网络来更新已有的代码包及其依赖包