面试题答案
一键面试使用场景
- 类型别名:主要用于代码的兼容性、简化导入包中的类型名称。比如在导入第三方包时,若包内类型名较长,可使用类型别名简化使用。它不会创建新类型,只是为现有类型取一个别名,代码中两者可互换使用。
- 类型定义:用于创建全新类型,新类型与原类型虽然底层结构相同,但属于不同类型。当需要为特定业务场景定义独特类型,并基于此添加特定方法集时使用。
底层结构
- 类型别名:底层结构与原类型完全一致,因为本质就是同一类型的不同名称。
- 类型定义:新类型拥有与原类型相同的底层结构,但Go语言将其视为不同类型,它们之间不能直接进行赋值操作,需显式类型转换。
方法集关联
- 类型别名:由于和原类型本质一样,所以拥有原类型的所有方法集,且方法集并未改变。
- 类型定义:新类型初始时没有原类型的方法集。若要为新类型定义方法,需重新在新类型上定义,可基于新类型的业务需求添加特定方法集,与原类型的方法集相互独立。