类型:常量的本质 · 常量展开

本文探讨了常量的本质,解释了常量展开的过程,强调了常量用于提高代码可读性和可维护性的重要性。指定了类型的常量会在类型不匹配时抛出异常,而未指定类型的常量仅作为符号。常量陷阱可能导致逻辑错误,解决方案包括使用变量或函数。常量没有运行期地址,它们在使用位置展开,而变量在运行期有确定的内存地址。
摘要由CSDN通过智能技术生成

常量展开

const a = 100

func main() {
    const b = 200
    println(a, b)
}
$ go tool objdump -s "main\.main" test
TEXT main.main(SB)
 main.go:7 CALL runtime.printlock(SB)
 main.go:7 MOVQ $0x64, 0(SP)
 main.go:7 CALL runtime.printint(SB)
 main.go:7 CALL runtime.printsp(SB)
 main.go:7 MOVQ $0xc8, 0(SP)
 main.go:7 CALL runtime.printint(SB)
 main.go:7 CALL runtime.printnl(SB)
 main.go:7 CALL runtime.printunlock(SB)

定义常量在哪里使用就会在哪里展开。可以通过汇编来确认。

反汇编可以看到MOVQ $0x64, 0(SP),其实编译器会把常量展开到调用的地方,所以和println(100)写法根本没有任何区别。

我们用常量的目的不是说导致一定的性能损失,因为常量会被展开,我们用常量目的是为了代码有更好的阅读性。一个软件最终产出除了编译出来程序以外,它的代码也是很重要的资产,代码的可阅读性可维护性同样是非常重要的。

指定类型的常量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值