GO面試第四天
阿新 • • 發佈:2022-04-04
1.下面這段程式碼能否通過編譯?不能的話,原因是什麼?如果通過,輸出什麼?
func main() { sn1 := struct { age int name string }{age: 11, name: "qq"} sn2 := struct { age int name string }{age: 11, name: "qq"} if sn1 == sn2 { fmt.Println("sn1 == sn2") } sm1 := struct{ age int m map[string]string }{age: 11, m: map[string]string{"a": "1"}} sm2 := struct { age int m map[string]string }{age: 11, m: map[string]string{"a": "1"}} if sm1 == sm2 { fmt.Println("sm1 == sm2") } }
參考答案及解析:編譯不通過 invalid operation: sm1 == sm2
這道題目考的是結構體的比較,有幾個需要注意的地方:
- 結構體只能比較是否相等,但是不能比較大小。
- 相同型別的結構體才能夠進行比較,結構體是否相同不但與屬性型別有關,還與屬性順序相關,下面sn3 與 sn1 就是不同的結構體;
sn3:= struct { name string age int }{age:11,name:"qq"}
- 如果 struct 的所有成員都可以比較,則該 struct 就可以通過 == 或 != 進行比較是否相等,比較時逐個項進行比較,如果每一項都相等,則兩個結構體才相等,否則不相等;
那什麼是可比較的呢,常見的有 bool、數值型、字元、指標、陣列等,像切片、map、函式等是不能比較的。 具體可以參考 Go 說明文件。https://golang.org/ref/spec#Comparison_operators