go 语言中的别名类型

什么是别名类型

我们可以用关键字 type 声明自定义的各种类型,类似:

go 复制代码
type People struct {
	name string
	age  int
}

当然了,这些类型必须在 Go 语言基本类型和高级类型的范畴之内。

在它们当中,有一种被叫做 "别名类型" 的类型。我们可以像下面这样声明它:

go 复制代码
type stringAlias = string

这条声明语句表示,stringAlias 是 string 类型的别名类型。顾名思义,别名类型与其源类型的区别恐怕只是在名称上,它们是完全相同的。我们完全可以使用以下代码测试:

go 复制代码
func func10() {
	var s1 stringAlias = "2"
	v, ok := interface{}(s1).(string)
	fmt.Println(ok)
	fmt.Println(v)
	fmt.Println(reflect.TypeOf(s1))
}

output:

go 复制代码
true
2
string

从代码结果来看,stringAlias 以及 string 实际上就是同一种类型。

延伸

如果我们这么定义呢?

go 复制代码
type stringAlias1 string

还是使用上面的例子进行测试:

go 复制代码
func func11() {
	var s1 stringAlias1 = "2"
	v, ok := interface{}(s1).(string)
	fmt.Println(ok)
	fmt.Println(v)
	fmt.Println(reflect.TypeOf(s1))
}

output:

go 复制代码
false

main.stringAlias1

我们可以从输出看出来,这里的 stringAlias1 和 string 是完全两种类型。这种我们叫类型的重定义。

相关推荐
满怀冰雪6 分钟前
第15篇-链表基础-反转链表-合并链表与快慢指针
java·算法·链表
番茄去哪了13 分钟前
RabbitMQ
java·rabbitmq·java-rabbitmq
西凉的悲伤14 分钟前
redis-windows 安装 redis 到 windows 电脑
java·windows·redis·redis-windows
starsky7623816 分钟前
NIO与BIO的区别
java·服务器·nio
满怀冰雪21 分钟前
第14篇-队列与单调队列-解决窗口最值问题的关键结构
java·算法
研☆香24 分钟前
jQuery特殊属性操作方法
前端·javascript·jquery
Mahir0833 分钟前
ConcurrentHashMap 底层原理深度解密:从分段锁到 CAS + 红黑树的演进全解
java·面试·concurhashmap
阿维的博客日记37 分钟前
那用到动态代理,关键的特征又是什么呢
java·动态代理
都说名字长不会被发现40 分钟前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
摇滚侠40 分钟前
Maven 依赖范围
java·maven