nil interface 和 nil interface 的区别是什么?

提问者:帅平 问题分类:面试刷题
nil interface 和 nil interface 的区别是什么?
1 个回答
风迎面吹、泪却逆着飞
风迎面吹、泪却逆着飞
虽然 interface 看起来像指针类型,但它不是。interface 类型的变量只有在类型和值均为 nil 时才为 nil如果你的 interface 变量的值是跟随其他变量变化的,与 nil 比较相等时小心。如果你的函数返回值类型是 interface,更要小心这个坑:
func main() {
   var data *byte
   var in interface{}
   fmt.Println(data, data == nil) // <nil> true
   fmt.Println(in, in == nil) // <nil> true
   in = data
   fmt.Println(in, in == nil) // <nil> false // data 值为 nil,但 in 值不为 nil
}
// 正确示例
func main() {
  doIt := func(arg int) interface{} {
  var result *struct{} = nil
  if arg > 0 {
  result = &struct{}{}
  } else {
  return nil // 明确指明返回 nil
  }
  return result
  }
  if res := doIt(-1); res != nil {
  fmt.Println("Good result: ", res)
  } else {
  fmt.Println("Bad result: ", res) // Bad result: <nil>
  }
}
发布于:5个月前 (11-29) IP属地:四川省
我来回答