Mat*_*att 5 error-handling assert if-statement go
Go非常不幸缺乏内置断言.我想以这种方式实现它们:
const ASSERT = true
func SomeFunction() {
if ASSERT && !some_condition_that_should_always_be_true() {
panic("Error message or object.")
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我定义if语句会被优化const ASSERT = false
吗?
正如人们在对您的问题的评论中所指出的那样,它是针对具体实施的.
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")
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
至于gccgo,它会删除此代码-O1
.您可以通过编译相同的代码来查看它
go build -compiler gccgo -gccgoflags '-O1' main.go
Run Code Online (Sandbox Code Playgroud)
然后做
objdump -S main
Run Code Online (Sandbox Code Playgroud)
查看带注释的程序集.