猿问

Go 是否优化了无法访问的 if 语句?

Go 非常遗憾缺乏内置断言。我想以这种方式实现它们:


const ASSERT = true


func SomeFunction() {

        if ASSERT && !some_condition_that_should_always_be_true() {

                panic("Error message or object.")

        }

}

我的问题是如果我定义了 if 语句会被优化const ASSERT = false吗?


吃鸡游戏
浏览 156回答 1
1回答

白衣非少年

正如人们在对您的问题的评论中所指出的那样,它是特定于实现的。gc 确实删除了它。您可以使用构建程序-gcflags '-S'并查看该ASSERT部分不在二进制文件中。例如,使用 编译以下代码-gcflags '-S',您将看到第 8 行和第 9 行的代码被包含在内,但更改Assert为 false,并且它们不会出现在 asm 列表中。package mainconst Assert = truevar cond = truefunc main() {    if Assert && !cond {        panic("failed")    }}编辑:至于 gccgo,它删除了-O1上面的代码。您可以通过编译相同的代码来查看它go build -compiler gccgo -gccgoflags '-O1' main.go然后做objdump -S main查看带注释的程序集。
随时随地看视频慕课网APP

相关分类

Go
我要回答