Golang Type System
基本类型 Basic Types
如下所示,有17种预先定义的built-in types
- Built-in string type:
string
. - Built-in boolean type:
bool
. - Built-in numeric types:
int8
,uint8
(byte
),int16
,uint16
,int32
(rune
),uint32
,int64
,uint64
,int
,uint
,uintptr
.- Note,
byte
is a built-in alias ofuint8
, andrune
is a built-in alias ofint32
.
- Note,
float32
,float64
.complex64
,complex128
.
通过反射也可以获取,如整数、浮点数、布尔值等。通过 reflect.TypeOf() 获取基本类型的信息。
var x int = 42
t := reflect.TypeOf(x)
fmt.Println(t.Kind()) // 输出:int
var y float64 = 3.14
t2 := reflect.TypeOf(y)
fmt.Println(t2.Kind()) // 输出:float64
复合类型 Composite Types
函数(function)
function也是一种类型,可以通过反射获取函数的签名(参数和返回值类型)。
f := func(a int, b int) int {
return a + b
}
t := reflect.TypeOf(f)
fmt.Println(t.Kind()) // 输出:func
fmt.Println(t.NumIn()) // 输出:2 (函数的输入参数个数)
fmt.Println(t.NumOut()) // 输出:1 (函数的输出参数个数)
指针(pointer)
pointer是指向某个值的地址类型。通过反射,我们可以检查指针类型及其指向的元素类型。
var ptr *int
t := reflect.TypeOf(ptr)
fmt.Println(t.Kind()) // 输出:ptr
fmt.Println(t.Elem()) // 输出:int (指针指向的类型)
接口(interface)
接口是定义行为的类型,它定义了一组方法集,但并不实现这些方法。接口类型可以通过反射 reflect.TypeOf()
获取类型信息,判断一个变量是否实现了该接口。
type Shape interface {
Area() float64
}
var s Shape
t := reflect.TypeOf(s)
fmt.Println(t.Kind()) // 输出:interface