回答

收藏

在 Go 中检查 nil 和 nil 接口

技术问答 技术问答 259 人阅读 | 0 人回复 | 2023-09-12

目前正在用这个辅助函数检查 nil 和 nil 接口
( h; h6 O9 |( S( C2 ^/ W; O& M
    func isNil(a interface{}) bool {  defer func() { recover() () return a == nil || reflect.ValueOf(a).IsNil()}, X! ]" q/ _" c7 m5 v! f+ ~) S3 v7 E7 k
由于reflect.ValueOf(a).IsNil()如果值的 Kind 不是Chan,Func,Map,Ptr,Interface或Slice,会引起恐慌,所以我会 deferred 放入recover()捕获它们。
  U; }  o# h" a* e, B, {. c1 O1 \! }有没有更好的方法来实现这个检查?它认为应该有更直接的方法来做到这一点。
; C* g) W5 j7 m/ ]( k; J  \                                                                ! B9 V5 ^$ |# M' h$ B5 p  |0 f/ m
    解决方案:                                                                : D9 c4 J8 L% I0 d% Z0 U/ v
                                                                简而言之:如果你从不储存它:(*T)(nil)在接口中,您可以可靠地使用 nil 的比较不需要反射。另一方面,无类型的 nil 总是可以分配给接口。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则