MST

星途 面试题库

面试题:Go语言中自定义类型的类型别名和类型定义有何区别

在Go语言里,自定义类型时涉及类型别名(type Alias = ExistingType)和类型定义(type NewType ExistingType),请详细阐述它们在使用场景、底层结构以及方法集关联等方面有什么区别。
31.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

使用场景

  • 类型别名:主要用于代码的兼容性、简化导入包中的类型名称。比如在导入第三方包时,若包内类型名较长,可使用类型别名简化使用。它不会创建新类型,只是为现有类型取一个别名,代码中两者可互换使用。
  • 类型定义:用于创建全新类型,新类型与原类型虽然底层结构相同,但属于不同类型。当需要为特定业务场景定义独特类型,并基于此添加特定方法集时使用。

底层结构

  • 类型别名:底层结构与原类型完全一致,因为本质就是同一类型的不同名称。
  • 类型定义:新类型拥有与原类型相同的底层结构,但Go语言将其视为不同类型,它们之间不能直接进行赋值操作,需显式类型转换。

方法集关联

  • 类型别名:由于和原类型本质一样,所以拥有原类型的所有方法集,且方法集并未改变。
  • 类型定义:新类型初始时没有原类型的方法集。若要为新类型定义方法,需重新在新类型上定义,可基于新类型的业务需求添加特定方法集,与原类型的方法集相互独立。