类型 & 变量
2019-04-12 本文已影响0人
小小爱笑
go实现
类型
原生基本类型
int, float , string, [2]int...
原生的高级类型
[]int , map[string]string ...
自定义类型
type User struct {
Id int
Name string
}
指针类型
*int , *[]int , *User ....
接口类型
代表了一组方法集合
io.Reader,
type Provider interface {
Add()
}
变量
go是静态类型语言,每个变量都有一种已知类型,并且在编译器确定。
type MyInt int
var i int
var j MyInt
变量i的静态类型为int,j的静态类型为MyInt,尽管他们的底层类型相同,但他们的静态类型不同,未经转换前无法进行赋值。
只要某个具体值(非接口)实现了某个接口中的方法,该接口类型的变量就能存储它
var r io.Reader
r = os.Stdin
r = bufio.NewReader(r)
r = new(bytes.Buffer)
无论r保存了什么值,r的静态类型总是io.Reader。
接口类型变量存储了一对值,即赋予该变量的具体值,以及该变量的类型描述符。接口内部的对总是 (值, 具体类型) 的形式。
r
包含的 (值, 类型) 对可以形式化地描述为(tty
,*os.File
)
var empty interface{}
empty = w
空接口值 e 也将再次包含同样的一对 ( tty, *os.File )