登录
首页 >  Golang >  Go问答

Golang nil 检查的严格性

来源:stackoverflow

时间:2024-02-22 11:48:24 440浏览 收藏

你在学习Golang相关的知识吗?本文《Golang nil 检查的严格性》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

在 typescript 中,如果我启用严格的 null 检查,每当我尝试访问可能为 null 值的属性时,我都会收到一个很好的警告,如下所示:

我注意到在 go 中,如果我对指针执行相同的操作,我不会收到警告。

我想知道,是否有某种方法可以设置 go,以便在执行等效操作时出现编译器错误。例如,我想在 go 中使用以下代码来抱怨:

var someuuid *uuid.uuid

fmt.println(someuuid.string())

然后,如果我这样做,它应该停止抱怨:

var someUUID *uuid.UUID

if someUUID != nil {
  fmt.Println(someUUID.String())
}

解决方案


TS 中存在的严格 null 检查基于包含 TypeScript 和 Go 之间根本差异的基础。如果您 read about TS' strict null checking,Go 中甚至没有概念上的等价物:

在严格空检查模式下,nullundefined 值并不在每种类型的域中,只能分配给它们本身和 any

在 TS 中(就像在 JS 中一样),所有对象都是引用,可以是 null;打开严格的 null 检查可以有效地禁用该行为,使 null 成为不可分配给对象类型的单独类型。

在 Go 中,只有指针和基于指针的类型可以是 nil,并且您无法关闭该行为以表明它们不能是 nil。如果您这样做的话,Go 中没有可能包含 nilany 类型。没有像 T | 这样的组合类型nil 允许您接受可能为 nil 的值。

此外,正如一些评论者指出的那样,在 Go 中(与 TS 不同),您仍然可以调用 nil 指针上的方法,这本质上并不是“错误”的行为。在尝试取消引用指针(通常通过访问字段隐式)之前,您不会遇到 nil dereference 错误。因此,这种严格的检查会破坏实时 Go 代码并强制更改 Go 习惯用法,包括“可用零值”之类的内容。

好了,本文到此结束,带大家了解了《Golang nil 检查的严格性》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>