首页 > 后端开发 > Golang > 正文

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

WBOY
发布: 2024-02-08 21:50:21
转载
752 人浏览过

在 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 指针没有意义,请编写一个使用非指针类型的 API。当然这有其缺点(有时指针是必须的);如果使用指针更有意义,请使用它,但检查

值,并正确处理它们(例如返回 error,如果有意义则恐慌等)。还要编写测试来使用 🎜 指针值进行测试。🎜

以上是在 Go 中,我可能会遇到潜在的 null ptr 取消引用的编译错误吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!