package main
import "fmt"
type A struct {
Id int
}
type B struct {
Id int
}
func main() {
var a int
var b int16
// 编译报错:invalid operation a == b (mismatched types int and int16)
fmt.Println(a == b)
aStruct := A{Id:5}
bStruct := B{Id:5}
// 编译报错:invalid operation: aStruct == bStruct (mismatched types A and B)
fmt.Println(aStruct == bStruct)
}
package main
import "fmt"
func main() {
a := [2]int{1, 2}
b := [2]int{1, 2}
c := [2]int{1, 3}
d := [3]int{1, 2, 4}
fmt.Println(a == b) // true
fmt.Println(a == c) // false
fmt.Println(a == d) // invalid operation: a == d (mismatched types [2]int and [3]int)
}
package main
import "fmt"
type A struct {
id int
name string
}
func main() {
a := A{id:5,name:"123"}
b := A{id:5,name:"123"}
c := A{id:5,name:"1234"}
fmt.Println(a == b) // true
fmt.Println(a == c) // false
}
那么可以理解成Struct结构体是可以比较的吗。我们再来看个例子:
package main
import "fmt"
type A struct {
id int
name string
son []int
}
func main() {
a := A{id:5,name:"123",son:[]int{1,2,3}}
b := A{id:5,name:"123",son:[]int{1,2,3}}
fmt.Println(a == b) // invalid operation: a == b (struct containing []int cannot be compared)
}
package main
import "fmt"
type A struct {
id int
name string
}
func main() {
a := &A { a : 1, b : "test1" }
b := &A { a : 1, b : "test1" }
c := a
fmt.Println(a == b) // false
fmt.Println(a == c) // true
ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
ch3 := ch1
fmt.Println(ch1 == ch2) // false
fmt.Println(ch1 == ch3) // true
}
var a interface{} = 0
var b interface{} = 2
var c interface{} = 0
var d interface{} = 0.0
fmt.Println(a == b) // false
fmt.Println(a == c) // true
fmt.Println(a == d) // false
type A struct {
a int
b string
}
var a interface{} = A { a: 1, b: "test" }
var b interface{} = A { a: 1, b: "test" }
var c interface{} = A { a: 2, b: "test" }
fmt.Println(a == b) // true
fmt.Println(a == c) // false
var d interface{} = &A { a: 1, b: "test" }
var e interface{} = &A { a: 1, b: "test" }
fmt.Println(d == e) // false
var f *os.File
var r io.Reader = f
var rc io.ReadCloser = f
fmt.Println(r == rc) // true
var w io.Writer = f
// invalid operation: r == w (mismatched types io.Reader and io.Writer)
fmt.Println(r == w)