golang的类型声明(type)

这篇博客探讨了Go语言中如何通过`type`关键字创建新的命名类型,这些类型基于现有的底层类型,但强调了它们之间的区别,不允许直接混用。例如,创建了基于`float64`的`Celsius`和`Fahrenheit`温度类型。通过示例展示了类型转换的重要性,如`Celsius(f1)`,以及类型安全的编程实践。文章还提及了类型在编译和运行时的角色,以及结构体和面向对象编程的概念。

通过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类型,程序员可以用来组合不同的属性和方法,进而实现面向对象的特性。剩下的自定义类型,本质上就是个符号了 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值