通过反射将 Nil 值作为接口传递
反射接口提出了有效传递 nil 值的挑战。考虑以下函数:
func f(e error) { if e == nil { fmt.Println("YEY! NIL") // Aim for this } else { fmt.Println("NOT NIL :(") } }
如果您尝试使用以下代码通过反射将 nil 值传递给函数,将会导致恐慌:
nilArg := reflect.Zero(reflect.TypeOf((error)(nil)))
Don'不要绝望!要绕过该问题,请使用表达式reflect.TypeOf((*error)(nil)).Elem()来获取接口错误的reflect.Type。这个技巧涉及将非接口值传递给reflect.TypeOf()并使用reflect.Elem()派生所需的类型。
对于 nilArg 构造,请使用以下内容:
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
享受一个工作游乐场示例来巩固您的理解。
以上是如何使用 Go 反射安全地传递 Nil 接口值?的详细内容。更多信息请关注PHP中文网其他相关文章!