静态类型与动态类型

静态类型(static type)

静态类型就是变量声明时候的类型。例如:

1
2
// int 是静态类型
var n int

动态类型(concrete type)

动态类型是程序运行时系统才能看见的类型。例如:

1
2
3
4
5
6
// in 的静态类型为 interface{}
var in interface{}
// in 的静态类型为 interface{} 动态类型为 int
in = 100
// in 的静态类型为 interface{} 动态类型为 string
in = "jpc"

​ 我们定义了一个空接口 in ,它的静态类型永远是 interface{} ,但它可以接受任何类型,接受整型数据时,它的动态类型就为 int ;接受字符串型数据时,它的动态类型就变为 string

接口组成

每个接口变量实际上都是由一 pair 对组成,其中记录了实际变量的值和类型。

这里声明了一个类型为 int 的变量,变量名叫 number 值为 100

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
number := (int)(100)
// 或者写成 number := (interface{})(100)
fmt.Printf("number type: %T, data: %v", number, number)
}
// 输出number type: int, data: 100