我一直在编写一个测试程序来帮助学习围棋。这样做时,我遇到了一些我认为编译器应该检测到错误的情况。我遇到过另一个类似的情况,所以我想我应该问为什么这种情况不被视为错误。
示例情况:
if oError = rwfile.WriteLines(asParams, sParamsFilename); oError != nil {
fmt.Printf("Error on write to file Params. Error = %s\n", oError)
} else {
println("Params file write OK")
}
在上面的例子中,无论变量“oError”是否被声明,编译器都不会指出错误。如果在未声明变量时(如预期的那样)该行包含以下内容,它也可以工作:
if oError := rwfile.WriteLines(asParams, sParamsFilename); oError != nil {
如果我声明变量“oError”,那么“:=”不起作用(如预期的那样)。
“rwfile”是我写的一个包,有问题的函数开头如下:
func WriteLines(asBuff []string, sFilename string) error { // write text file
如果我在写入文件时创建错误,并使用“=”而不声明变量“oError”,则程序可以正常工作并检测到非零“oError”变量。
那么,当 oError 未声明为变量时,为什么上面使用“=”不被视为错误?
Go 版本是 go1.1.2 Windows/386。