类型 & 变量

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 )

参考资料

反射三法则
Go中接口值的表示

你可能感兴趣的:(类型 & 变量)