通过type
关键字来定义一个新的命名类型,它基于一个已有的底层类型。新的类型的结构和行为由底层类型决定,但明确表明了它与底层类型不一样,所以不能混用。
语法:
type name underlying-type
同样,如果类型的name以大写开头,则会导出,可以在包外访问。
可以简单地这样理解:命名类型决定能不能通过编译,而底层类型决定实际运行结果。举例:
// 两种基于 float64 底层类型的新的命名类型
type Celsius float64
type Fahrenheit float64
// 分别声明两个变量
var c1 Celsius = 12
var f1 Fahrenheit = 78
c1 + f1 // 编译失败,因为类型不一样,所以无法操作
// 编译成功,结果是90,因为 Celsius(f1) 做了类型转换,尽管转换后的值的意义与原来的不一样
c1 + Celsius(f1)
c1 + 34 // 编译成功,执行的结果还是 Celsius 类型
好有意思的类型系统,不过也确实是这样,基本类型和常用的数据结构都有语言本身提供,包括struct类型,程序员可以用来组合不同的属性和方法,进而实现面向对象的特性。剩下的自定义类型,本质上就是个符号了 。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/daguanjia11/article/details/121236164
内容来源于网络,如有侵权,请联系作者删除!