Go 非常遗憾缺乏内置断言。我想以这种方式实现它们:const ASSERT = truefunc SomeFunction() { if ASSERT && !some_condition_that_should_always_be_true() { panic("Error message or object.") }}我的问题是如果我定义了 if 语句会被优化const ASSERT = false吗?
1 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
正如人们在对您的问题的评论中所指出的那样,它是特定于实现的。
gc 确实删除了它。您可以使用构建程序-gcflags '-S'并查看该ASSERT部分不在二进制文件中。
例如,使用 编译以下代码-gcflags '-S',您将看到第 8 行和第 9 行的代码被包含在内,但更改Assert为 false,并且它们不会出现在 asm 列表中。
package main
const Assert = true
var cond = true
func main() {
if Assert && !cond {
panic("failed")
}
}
编辑:
至于 gccgo,它删除了-O1上面的代码。您可以通过编译相同的代码来查看它
go build -compiler gccgo -gccgoflags '-O1' main.go
然后做
objdump -S main
查看带注释的程序集。
- 1 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消