第 21 章 静态类型与动态类型
21.1 静态类型(static type)
静态类型就是变量声明时候的类型。例如:
代码语言:go复制// int 是静态类型
var number int
// string 也是静态类型
var name string
21.2 动态类型(concrete type)
动态类型是程序运行时系统才能看见的类型。例如:
代码语言:go复制// in 的静态类型为 interface{}
var in interface{}
// in 的静态类型为 interface{} 动态类型为 int
in = 100
// in 的静态类型为 interface{} 动态类型为 string
in = "《从0到Go语言微服务架构师训练营》"
通过上面的例子,可以看到我们定义了一个空接口 in
,它的静态类型永远是 interface{}
,但它可以接受任何类型,接受整型数据时,它的动态类型就为 int
;接受字符串型数据时,它的动态类型就变为 string
。
21.3 接口组成
每个接口变量实际上都是由一 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)
}
运行上面的程序输出如下:
代码语言:shell复制number type: int, data: 100