Go可比較是否相等的型態如下。
所謂可比較是否相等(equality comparison)是指能以比較相等運算符==
及不等運算符!=
比較兩個型態值是否相同。以下型態可用==
及!=
進行比較。
- 布林 Boolean -
bool
。 - 整數 Integer -
int
、int8
、int16
、int32
、int64
、uint
、uint8
、uint16
、uint32
、uint64
。 - 浮點數 Floating-point -
float32
、float64
- 複數 Complex -
complex64
、complex128
- 字串 String -
string
。 - 指標 Pointer -
*T
。 - 併發通道 Channel -
chan
。 - 介面 Interface -
interface
。實作型態必須是comparable。 - 結構 Struct -
struct
。所有的欄位必須是comparable。 - 陣列 Array - 所有的元素必須是comparable
main.go
package main
import (
"fmt"
)
type Worker interface {
Work()
}
type Employee struct {
ID int64
Name string
Age int
}
func (e Employee) Work() {
fmt.Printf("%s is working", e.Name)
}
type Manager struct {
ID int64
Name string
}
func (m Manager) Work() {
fmt.Printf("%s is working", m.Name)
}
func main() {
b1 := true
b2 := true
fmt.Println(b1 == b2) // true
i1 := 10
i2 := 10
fmt.Println(i1 == i2) // true
f1 := 9.99
f2 := 9.99
fmt.Println(f1 == f2) // true
c1 := complex(0.1, 0.1)
c2 := complex(0.1, 0.1)
fmt.Println(c1 == c2) // true
s1 := "hello"
s2 := "hello"
fmt.Println(s1 == s2) // true
p1 := &s1
p2 := &s2
fmt.Println(p1 == p2) // false
ch1 := make(chan int)
ch2 := make(chan int)
fmt.Println(ch1 == ch2) // false
var w1, w2 Worker
w1 = Employee{ID: 1, Name: "John"}
w2 = Manager{ID: 1, Name: "John"}
fmt.Println(w1 == w2) // false
emp1 := Employee{ID: 1, Name: "John", Age: 33}
emp2 := Employee{ID: 1, Name: "John", Age: 33}
fmt.Println(emp1 == emp2) // true
a1 := [3]int{1, 2, 3}
a2 := [3]int{1, 2, 3}
fmt.Println(a1 == a2) // true
}
至於map、slice及function則是不可比較的(not comparable),也就是無法用==
及!=
進行比較,編譯時會出現錯誤。
沒有留言:
張貼留言