gpt4 book ai didi

Golang 严格的 nil 检查

转载 作者:行者123 更新时间:2023-12-01 22:16:57 34 4
gpt4 key购买 nike

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

Typescript strict null check example

我注意到在 Go 中,如果我对指针做同样的事情,我不会收到警告。

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

var someUUID *uuid.UUID

fmt.Println(someUUID.String())

如果我这样做,它应该停止提示:

var someUUID *uuid.UUID

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

最佳答案

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

In strict null checking mode, the null and undefined values are not in the domain of every type and are only assignable to themselves and any.



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

在 Go 中,只有指针和基于指针的类型可以是 nil ,并且您无法关闭该行为以说它们不能是 nil .没有 any输入可能包含 nil 的 Go如果你这样做了。没有像 T | nil 这样的组合类型这将允许您接受可能- nil值(value)。

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

关于Golang 严格的 nil 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59220605/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com