Open utterances-bot opened 3 years ago
赞
严格来讲这个比较的应该算是空结构体指针吧。俩空结构体的话,肯定是相等的,比如println(struct{}{} == struct{}{})。
各位客观,再看看这个interface的nil 判等问题
package main
import "fmt"
type TestStruct struct{}
type temp interface {
foo()
}
func NilOrNot(v interface{}) bool {
return v == nil
}
func main() {
var s1 *TestStruct
fmt.Println(s1 == nil) // #=> true
fmt.Println(NilOrNot(s1)) // #=> false
fmt.Println()
var t1 temp
var t2 *temp
var s2 TestStruct
fmt.Printf("t1 (empty interface var) is nil %v\n,t2 (empty pointer interface var) is nil %v\n",t1==nil,t2==nil)
fmt.Println("t1 after nilOrNot:",NilOrNot(t1)) // #=> true
fmt.Println("t2 after nilOrNot:",NilOrNot(t2)) // #=> false
fmt.Println()
fmt.Println(NilOrNot(&s2)) // #=> false
fmt.Println(NilOrNot(s2)) // #=> false
}
用 Go struct 不能犯的一个低级错误!
https://eddycjy.com/posts/go/go-empty-struct/