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

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

在Go语言中,不会出现潜在的空指针取消引用的编译错误。这是因为Go语言在设计上就避免了空指针的问题。在声明变量时,默认会将其初始化为零值,而不是空指针。同时,Go语言还提供了丰富的错误处理机制,如使用多返回值来返回错误信息,以及使用defer和panic/recover来处理异常情况。这些特性使得Go语言在编译阶段就能够捕获潜在的空指针错误,并提供了更安全可靠的编程环境。所以,在Go语言中,不会出现类似于“null ptr取消引用”的编译错误。

问题内容

一位同事在 go 中取消引用了 null ptr。

我建议他像我一样做 – 使用其他语言工作时,我倾向于将警告级别调高并将警告变成错误。例如c#,这意味着我无法编译此代码:

  1. private static string bad_deref(object? object){ return object.tostring();}

登录后复制

因为我明白了

  1. 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 中,我可能会遇到潜在的 null ptr 取消引用的编译错误吗?的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    编程技术

    在 Go 中是否有安全的方法将 float64 转换为 int64?

    2025-3-1 17:21:15

    编程技术

    Go 中的并发安全模板:我该怎么做?

    2025-3-1 17:21:31

    0 条回复 A文章作者 M管理员
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索