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

GO面試第五天

1.通過指標變數 p 訪問其成員變數 name,有哪幾種方式?

  • A.p.name
  • B.(&p).name
  • C.(*p).name
  • D.p->name

參考答案及解析:AC。& 取址運算子,* 指標解引用。

2.下面這段程式碼能否通過編譯?如果通過,輸出什麼?

package main

import "fmt"

type MyInt1 int
type MyInt2 = int

func main() {
    var i int =0
    var i1 MyInt1 = i 
    var i2 MyInt2 = i
    fmt.Println(i1,i2)
}

參考答案及解析:編譯不通過,cannot use i (type int) as type MyInt1 in assignment

這道題考的是類型別名與型別定義的區別。

第 5 行程式碼是基於型別 int 建立了新型別 MyInt1,第 6 行程式碼是建立了 int 的類型別名 MyInt2,注意類型別名的定義時 = 。所以,第 10 行程式碼相當於是將 int 型別的變數賦值給 MyInt1 型別的變數,Go 是強型別語言,編譯當然不通過;而 MyInt2 只是 int 的別名,本質上還是 int,可以賦值。

第 10 行程式碼的賦值可以使用強制型別轉化 var i1 MyInt1 = MyInt1(i).