我知道Go在这方面与其他语言略有不同,但我想知道Go语言是否值得在比较时自动测试nil指针并且如果只有一个值为nil则返回不相等(在比较)而不是创建运行时错误。 Go在很多领域都是如此之大,我以为它可以做到。这方面的例子如下:
type cuForm struct {sName string; iUseCount int64; baForm []byte}
var pugForm *cuForm
//***********************************************************
func loadForm (sWanted string) (*cuForm, os.Error) {
//***********************************************************
if (sWanted == pugForm.sName) {
在上面的示例中,如果pugForm为nil,则会发生运行时错误。显然,如果只有一个值为零,则它不能相等 - 至少逻辑上。可能有理由不应该这样做,但我不认为历史应该是一个原因。
答案 0 :(得分:1)
错误消息是:“panic:运行时错误:无效的内存地址或nil指针取消引用。”实际错误是nil指针取消引用。
当指针pugForm为nil时,pugForm.sName未定义。您希望它是一个特殊值,如SQL中的null或浮点数的NaN。现在,您需要为所有操作设置一组特殊规则,而不仅仅是相等。
零指针取消引用几乎总是错误的。如果发生这种情况,运行时应该反对如果没有错,请通过测试nil来避免问题。修正你的错误,不要试图假装它没有发生。
您对此计划的期望是什么?
package main
import (
"fmt"
)
func main() {
var i int
var p *int
var b bool
b = i == *p
b = i <= *p
b = i >= *p
i += *p
i -= *p
i *= *p
i /= *p
i %= *p
i = *p << uint(i)
i = *p >> uint(i)
fmt.Println(i, p, b)
}
答案 1 :(得分:0)
不是说你的问题不合适,我认为没有把它作为默认的comportment来实现:这意味着在运行时有更多的测试,我不希望我的程序的所有相等测试。
但确实,专用表达式(例如'===')可能(可能)有用。
正如Nos所说,go-nuts邮件列表可能会成为讨论的一个更具建设性的地方。