当前位置: 首页 > 面试题库 >

在Go中检查nil和nil接口

东方旺
2023-03-14
问题内容

目前,我正在使用此辅助函数来检查nil和nil接口

func isNil(a interface{}) bool {
  defer func() { recover() }()
  return a == nil || reflect.ValueOf(a).IsNil()
}

由于reflect.ValueOf(a).IsNil()恐慌,如果该值的种类比其他任何东西ChanFuncMapPtrInterface或者Slice,我在推迟扔recover()赶上那些。

有没有更好的方法来完成此检查?它认为应该有更直接的方法来做到这一点。


问题答案:

例如,在golang-nuts邮件列表中,请参阅此线程中的Kyle答案。

简而言之:如果您从不存储(*T)(nil)在接口中,那么您可以可靠地使用对nil的比较,而无需使用反射。另一方面,将无类型的nil分配给接口总是可以的。



 类似资料:
  • 目前我正在使用这个帮助函数来检查nil和nil接口 因为<代码>反映。(a)的值。如果值的种类不是< code>Chan、< code>Func、< code>Map、< code>Ptr、< code>Interface或< code>Slice,IsNil()会出现混乱,我在deferred 中抛出了这些内容。 有没有更好的方法来实现这种检查?它认为应该有一个更直接的方法来做到这一点。

  • nil 和 BOOL 检查 类似于 Yoda 表达式,nil 检查的方式也是存在争议的。一些 notous 库像这样检查对象是否为 nil: if (nil == myValue) { ... 或许有人会提出这是错的,因为在 nil 作为一个常量的情况下,这样做就像 Yoda 表达式了。 但是一些程序员这么做的原因是为了避免调试的困难,看下面的代码: if (myValue == nil) { .

  • 本文向大家介绍总结IOS中nil、Nil、NULL和NSNull区别,包括了总结IOS中nil、Nil、NULL和NSNull区别的使用技巧和注意事项,需要的朋友参考一下 NULL 对于学习过 C/C++ 语言的朋友,对 NULL 一定很熟悉吧?这就是在 C/C++ 中的空指针。 在 C 语言中, NULL 是无类型的,只是一个宏,它代表空。我们不研究 C++ 中的 NULL ,因为在 C++11

  • 问题内容: 我有一个带代码块的lua脚本,如下所示: 当我尝试使用以下命令KEYS和ARGV运行脚本时:- 错误:- 问题答案: TL; DR表示由返回的值,用于与JSON的值进行比较。 说明:Lua 在表中用于标记已删除的条目。如果将JSONinc 转换为Lunatic ,则解码的对象将损坏。因此,cjson lib使用轻量级的userdata类型表示/ 。 您的“ call_data”具有一个

  • 本文向大家介绍iOS中nil、Nil、NULL、NSNull详解,包括了iOS中nil、Nil、NULL、NSNull详解的使用技巧和注意事项,需要的朋友参考一下 ObjC 里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质。 nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interface 声明的 ObjC 对象。 例如

  • 问题内容: 我正在尝试查询Firebase,以检查是否有任何用户,然后在返回快照时,我想查看它是否等于nil。我尝试执行此操作,但是我使用的方法不起作用,并且如果快照不等于nil,则只有某种输出。我添加了当前拥有的代码和Firebase中的JSON文本。 JSON数据: 问题答案: 这里发生了几件事,但是最重要的是,您无法测试患儿的存在。如果您考虑一下,那是有道理的:当将一个孩子添加到该位置时,将