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

相关推荐
weixin_3954489110 分钟前
tidl_import_mul_rmfsd_psd_u8_3x480x544_bise_raw_dynamic.txt
java·服务器·前端
多多*1 小时前
图解Redis的分布式锁的历程 从单机到集群
java·开发语言·javascript·vue.js·spring·tomcat·maven
想用offer打牌1 小时前
2025年总结:一个树苗倔强生长
java·后端·开源·go
a程序小傲1 小时前
国家电网面试被问:FactoryBean与BeanFactory的区别和动态代理生成
java·linux·服务器·spring boot·spring·面试·职场和发展
电商API&Tina1 小时前
Python请求淘宝商品评论API接口全指南||taobao评论API
java·开发语言·数据库·python·json·php
若鱼19191 小时前
SpringBoot4.0新特性-Resilience之失败重试
java·spring
摩西蒙1 小时前
业务监控和常用产品
java·大数据·人工智能
哪里不会点哪里.1 小时前
Spring 核心原理解析:它到底解决了什么问题?
java·后端·spring
Mr Xu_1 小时前
Vue + Element Plus 实现前端导出 Excel 功能详解
前端·javascript·vue.js
前端大波2 小时前
vue3的自动化路由(unplugin-vue-router)
javascript·vue.js·自动化