卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34379本站已运行393

在 Go 中,我可能会遇到潜在的 null ptr 取消引用的编译错误吗?

在 go 中,我可能会遇到潜在的 null ptr 取消引用的编译错误吗?

在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 指针值进行测试。

卓越飞翔博客
上一篇: 在 Go 中是否有安全的方法将 float64 转换为 int64?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏