Go语言基础概念
go语言特点
- Go从表面看起来和C相似,基于多种语言的优点
- 并发功能
- 数据抽象
- 面向对象
- 垃圾回收
go语言特性
- 静态类型和编译型:变量和常量在声明时指定类型,且不可改变
- 跨平台
- 自动垃圾回收
- 原生的并发编程:并发编程模型的组成部分
- goroutine (Go例程)
- channle (通道)
- 函数类型为第一等类型
- 面向对象编程:接口类型和实现类型、嵌入替代继承
工程结构
工作区
Go源码文件必须存放在工作区中,是一个对应于特定工程的目录
src目录:用于以代码包的形式组织并保存Go源码文件
pkg目录:存放通过go install命令安装后的代码包的归档文件(名称以 “.a” 结尾的文件)
bin目录:和pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码生成的可执行文件
GOPATH
实际开发环境中有一个或多个工作区,这些工作区的目录路径都需要添加到GOPATH中
源码文件
命令源码文件
源码文件声明属于main代码包,且该文件代码中包含无参数声明和结果声明的main函数,可通过go run命令直接启动运行
库源码文件
测试源码文件
代码包
gopcp.v2/helper/log/base包中的源码文件声明属于代码包: package "base" -- 包名是代码包路径的最后一个元素 -- 命令源码文件存放在哪个代码包中,都必须声明属于mian包复制代码
import ( _"github.com/Sirupsen/logrus" )复制代码
- 大写:可以被本代码包之外的代码访问到
- 小写:只能被本包内的代码访问
import "gopcp.v2/helper/log/base"复制代码
import ( "gopcp.v2/helper/log/base" "gopcp.v2/helper/log/logrus" )复制代码
import ( "github.com/Sirupsen/logrus" mylogrus "gopcp.v2/helper/log/logrus" )复制代码
import ( ."gopcp.v2/helper/log/logrus" )复制代码
包初始化:Go中有专门的初始化函数负责代码包初始化
func init(){ fmt.Println("Initialize...") }复制代码
包初始化的顺序
- 导入包的初始化函数
- 当前代码包的全局变量
- 当前代码包的初始化函数
- main函数
标准命令
build
go build命令用于编译指定的源码文件或代码包以及它们的依赖包
- 命令源码文件被编译成可执行文件,并存放到 命令执行的目录或指定目录下
- 库文件源码不会在非临时目录中留下任何文件
clean
go clean命令用于清除因执行其他go命令遗留下来的临时目录和文件
fix
go fix命令用于修正指定代码包的源码文件中包含的过时语法和代码调用,使得升级Go语言版本时可以非常方便的同步升级程序
fmt
go fmt命令用于格式化指定代码包中的Go源码文件
get
go get命令用于下载、编译并安装指定的代码包以及其依赖包
install
go install命令用于编译并安装指定的代码包及其依赖包
list
go list命令用于显示指定代码包中的信息,进行代码包分析
run
编译并运行指定的命令源码文件,不生成可执行文件而直接运行命令源码文件
test
go test 命令用于测试指定的代码包,前提是该代码包目录中必须存在测试源码文件
tool
go tool用于运行Go语言的特殊工具
vet
go vet命令用于检查指定代码包中的Go语言源码,并报告发现可疑代码问题(除了编译以外的又一个程序检查方法)
version
显示当前安装的Go语言的版本信息以及计算环境
- 执行标准命令时可以添加的特殊参数
- -a
- -n
- -race
- -v
- -work
- -x
- Go语言的两个工具【Go程序调优】
pprof
分析CPU、内存、程序阻塞概要文件,并根据要求提供高可读性的输出信息
trace
读取Go程序踪迹文件,并以图形化的方式展现出来,深入了解Go程序在运行过程中的内部情况
- 当前进程中堆的大小及使用情况
- 程序中的多个goroutine如何调度以及某个时刻被调度的原因