包
包的定义 --> package关键字,包名通常是和目录名一直,不能包含-
一个文件夹就是一个包
文件夹里面放的都是.go文件
包的导入 import
- 包的导入路径是从$GOPATH/src后面的路径开始写起
- 单行导入
-
- 多行导入
- 为导入的包起别名
- 匿名导入 – 导入之后会执行init
- GO不支持循环导入
包中的标识符(变量名/函数名/结构体名/接口名/常量)可见性 --> 标识符首字母大写表示对外可见
init() - 包导入的时候会自定执行
- 一个包里面只有一个init()
- init()没有参数也没有返回值,也不能调用
- 多个包的init执行顺序
- 一般用于做一些初始化操作
接口
接口是一种类型,一种抽象的类型
接口就是你要实现的方法的清单
接口的定义
type mover interface{
方法的签名(参数)(返回值)
}
接口的实现
实现了接口的所有方法,就实现了这个接口
实现了接口就可以当成这个接口类型的变量
接口变量
实现了一个万能的变量,可以保存所有实现了我这个接口的类型的值
通常是作为函数的参数出现
空接口
interface{}
接口中没有定义任何方法,也就是说任意类型都实现了空接口–>任何类型都可以存到空接口变量中
作为参数
map[string]interface{}
接口底层
- 动态类型
- 动态值
类型断言
做类型断言的前提是:一定要是一个接口类型的变量
x.(T)
使用 switch