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 是完全两种类型。这种我们叫类型的重定义。

相关推荐
一个响当当的名号14 分钟前
lectrue9 索引并发控制
java·开发语言·数据库
进阶小白猿18 分钟前
Java技术八股学习Day30
java·开发语言·学习
lead520lyq19 分钟前
Golang本地内存缓存
开发语言·缓存·golang
2601_9498683630 分钟前
Flutter for OpenHarmony 电子合同签署App实战 - 主入口实现
开发语言·javascript·flutter
m0_7482299931 分钟前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
xiaoxue..1 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
摘星编程1 小时前
在OpenHarmony上用React Native:自定义useHighlight关键词高亮
javascript·react native·react.js
hhy_smile1 小时前
Class in Python
java·前端·python
小邓吖1 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
qq_12498707532 小时前
基于Srpingboot心晴疗愈社平台的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·spring·microsoft·毕业设计·计算机毕业设计