Go中的类型定义和类型别名

本文探讨了Go语言中类型定义和类型别名的相同点与不同点。相同点在于它们都使用关键字进行声明。不同点主要包括定义方式、本质和使用方式。类型定义创建了新的类型,而类型别名只是为已有类型提供一个替代名称,不创建新类型,且在编译后别名不存在。类型别名可以继承原有类型的方法,而新类型则不共享这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意Go 1.9 之后才出现了类型别名

相同点

两种定义的方式均使用 type关键字

不同点

1. 定义方式不同

类型定义方式如下:

type NewType Type

类型别名定义如下:

type NewType = Type
2. 本质不同

类型定义相当于定义了一个全新的类型,与之前的类型不同,但是类型别名并没有定义一个新的类型,而是使用一个别名来替换之前的类型,就比如说一个人的乳名,虽然你的乳名和你的全名不同,但是实际上他们指的都是你

下面的代码可以很明显的说明这一点:

package main 

import (
	"fmt"
)

func main(){
	// 类型定义
	type MyInt int 

	// 类型别名定义
	type MyInt2 = int 

	var i MyInt = 2
	var j MyInt2 = 2

	fmt.Printf("i的值为:%v, i的类型为: %T\n", i, i)
	fmt.Printf("j的值为:%v, j的类型为: %T\n", j, j)
}

代码输入如下:

i的值为:2, i的类型为: main.MyInt
j的值为:2, j的类型为: int

类型别名只会在代码中存在,在编译完成之后并不会存在该别名

3. 使用方式有所不同

因为类型别名和原来的类型是一致的,所以原来类型所拥有的方法,类型别名中也可以调用,但是如果是重新定义的一个类型,那么不可以调用之前的任何方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值