什么是别名类型
我们可以用关键字 type
声明自定义的各种类型,类似:
type People struct { name string age int }
当然了,这些类型必须在 Go
语言基本类型和高级类型的范畴之内。在它们当中,有一种被叫做 ”别名类型”
的类型。我们可以像下面这样声明它:
type stringAlias = string
这条声明语句表示,stringAlias
是 string
类型的别名类型。顾名思义,别名类型与其源类型的区别恐怕只是在名称上,它们是完全相同的。我们完全可以使用以下代码测试:
func func10() { var s1 stringAlias = "2" v, ok := interface{}(s1).(string) fmt.Println(ok) fmt.Println(v) fmt.Println(reflect.TypeOf(s1)) }
output:
true 2 string
从代码结果来看,stringAlias
以及 string
实际上就是同一种类型。
延伸
如果我们这么定义呢?
type stringAlias1 string
还是使用上面的例子进行测试:
func func11() { var s1 stringAlias1 = "2" v, ok := interface{}(s1).(string) fmt.Println(ok) fmt.Println(v) fmt.Println(reflect.TypeOf(s1)) }
output:
false main.stringAlias1
我们可以从输出看出来,这里的 stringAlias1
和 string
是完全两种类型。这种我们叫类型的重定义
。