在Go语言中,不会出现潜在的空指针取消引用的编译错误。这是因为Go语言在设计上就避免了空指针的问题。在声明变量时,默认会将其初始化为零值,而不是空指针。同时,Go语言还提供了丰富的错误处理机制,如使用多返回值来返回错误信息,以及使用defer和panic/recover来处理异常情况。这些特性使得Go语言在编译阶段就能够捕获潜在的空指针错误,并提供了更安全可靠的编程环境。所以,在Go语言中,不会出现类似于“null ptr取消引用”的编译错误。
一位同事在 go 中取消引用了 null ptr。
我建议他像我一样做 - 使用其他语言工作时,我倾向于将警告级别调高并将警告变成错误。例如c#,这意味着我无法编译此代码:
private static string bad_deref(object? object) { return object.tostring(); }
因为我明白了
x.cs(y,z): [CS8602] Dereference of a possibly null reference.
明确地说,这非常好。
但他告诉我 go 没有警告级别来启动,并且通过谷歌搜索,看来他是对的。
那么在 go 中如何解决这个问题呢?我们是否回到了古老的 c 建议“优秀的程序员不会犯错误”,并且如果您不与完美的人一起工作,有时会发生 null ptr 取消引用?
这是正确的:如果不处理 nil
情况,就不能因取消引用指针而导致编译器错误。那是因为语言规范允许这样做。你对此无能为力。
您可以用任何语言编写错误/不正确的代码,尽早发现错误或减轻错误的方法是用几乎所有语言编写测试。
Go 在 go
工具本身中内置了一个很好的测试框架。你绝对应该利用它。随时随地编写测试。 Go 测试应该定期执行,它们在 CI/CD 期间和发布之前自动运行。大多数 IDE 还会自动运行保存测试。
您可以使用的另一个技巧:如果 nil
指针没有意义,请编写一个使用非指针类型的 API。当然这有其缺点(有时指针是必须的);如果使用指针更有意义,请使用它,但检查 nil
值,并正确处理它们(例如返回 error
,如果有意义则恐慌等)。还要编写测试来使用 nil
指针没有意义,请编写一个使用非指针类型的 API。当然这有其缺点(有时指针是必须的);如果使用指针更有意义,请使用它,但检查
error
,如果有意义则恐慌等)。还要编写测试来使用 🎜 指针值进行测试。🎜以上是在 Go 中,我可能会遇到潜在的 null ptr 取消引用的编译错误吗?的详细内容。更多信息请关注PHP中文网其他相关文章!