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

相关推荐
前端工作日常4 分钟前
我学习到的Java概念
java·后端
卓怡学长6 分钟前
w263基于springboot + vue 健康饮食管理系统
java·数据库·vue.js·spring boot·spring·intellij-idea
九皇叔叔25 分钟前
RHEL9.8 配置本地镜像仓库
android·java·缓存
范什么特西25 分钟前
苍穹外卖体会
java
Nontee34 分钟前
数据类型与包装类 — 一个新手学Java的数据类型笔记
java·笔记·python
音符犹如代码43 分钟前
Java动态线程池:避坑原生线程池,吃透Dynamic-TP,手写一个Demo
java·开发语言
wangruofeng1 小时前
终端里 rm 一下文件就没了,macOS 怎么删文件才进废纸篓
javascript·命令行·apple
万亿少女的梦1681 小时前
基于Spring Boot、Vue.js和MySQL的超市管理系统设计与实现
java·vue.js·spring boot·mysql·管理系统
小妖6661 小时前
React input 输入卡顿问题
前端·javascript·react.js
AI产品实战2 小时前
Gradle打包生成dependencies.xml详解
xml·java·gradle