go语言-包(一)
go使用包来组织源代码,Go语言没有强制要求包名必须和其所在的目录名同名,但是建议包名和所在目录名同名,包借助了目录树的组织方式。
包的导入:包名是从GOPATH/src/后开始计算的,使用/进行路径分隔
全路径导入:GOROOT/src后开始写
包命名别名:import F "fmt"
省略引用格式:import . "Fmt"引用时直接使用Println()
匿名引用:只是希望执行包初始化的init 函数,而不使用包内部的数据时,可以使用import _ "net/http"
包加载:在执行main包的main函数之前,go引导程序对整个程序的包进行初始化。从main函数引用的包开始,逐级查找包的引用,直到找到没有引用其他包的包,最终生成一个包引用的有向无环图。然后将图转化为一棵树,从树的叶子节点逐层向上对包进行初始化。单个包初始化时,先初始化常量,然后全局变量,最后执行init函数。
使用 export 指令可以将当前目录的值设置到环境变量 GOPATH中。
export GOPATH=pwd
建立gopath中的源码目录:mkdir -p src/hello
编译和运行:go install hello
bin目录下执行./hello
GOPATH路径建议随项目路径设置,避免不可预知的错误
功能常用内置包
fmt io
bufio 对io包的封装,并提供了缓冲数据功能
sort
strconv 字符串和基本数据类型之间转换
sync 实现中锁机制和其他同步互斥机制
flag 命令行参数规则定义和解析
encoding/json 对象《=》JSON字符串间转换
html/template 主要实现了 web 开发中生成 html 的 template 的一些函数
net/http
ox/exec linux命令相关实现
reflect
bytes log
自定义包
Go 编译速度快受益于以下三点:
所有导入的包必须在每个文件的开头显示的声明
禁止包的环状依赖,包的依赖关系会形成一个有向无环图,每个包可以独立编译,且很可能会并发编译
编译后的文件不仅记录了本身的导出信息,目标文件还记录了包的依赖关系。因此在编译一个包时,不需要遍历所有引入的包,只需要读取直接导入的目标文件即可。
包中的标识符,让外部的包可以访问包的类型和值
type MyStruct struct {
OutPackage int // 包外可用
innerPack string // 包内访问
}
type MyInterface interface {
ExportedMethod() // 包外
innerMethod()// 包内
}
发表评论 (审核通过后显示评论):