静态类型(static type) 就是变量声明时候的类型。例如: // int 是静态类型 var number int // string 也是静态类型 var name string
动态类型(concrete type) 是程序运行时系统才能看见的类型。例如: // in 的静态类型为 interface{} var in interface{} // in 的静态类型为 interface{} 动态类型为 int in = 100 // in 的静态类型为 interface{} 动态类型为 string in = "菜籽爱编程"
通过上面的例子,可以看到我们定义了一个空接口 in ,它的静态类型永远是 interface{} ,但它可以接受任何类型,接受整型数据时,它的动态类型就为 int ;接受字符串型数据时,它的动态类型就变为 string 。 每个接口变量实际上都是由一 pair 对组成,其中记录了实际变量的值和类型。例如: var number int = 100
这里声明了一个类型为 int 的变量,变量名叫 number 值为 100 。知道了接口的组成,我们也可以使用下面的方式定义一个变量: 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
参考文献: [1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017. 👇周一至周五更新,期待你的关注👇
|