1. 程式人生 > 其它 >GO面試第四天

GO面試第四天

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