GO面試第五天
阿新 • • 發佈:2022-04-04
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).