Golang 基礎面試題 01

發表於2023-09-18

背景

在之前的文章中分享了 k8s 相關的面試題,本文我們重點來討論和 k8s 密切相關的 Go 語言面試題。

這幾年隨著雲原生的興起,大部分後端開發者,特別是 Java 開發者都或多或少的想學習一些 Go 相關的技能,所以今天分享的內容比較初級,適合 Go 語言初學者。

image.png

本文內容依然來自於這個倉庫
https://github.com/bregman-arie/devops-exercises

以下是具體內容:

()的內容是我的補充部分。

Go 101

Go 語言有哪些特點

  • Go 是一種強型別靜態語言,變數的型別必須在宣告的時候指定(但可以使用型別推導),在執行時不能修改變數型別(與 Python 這類動態型別語言不同)。
  • 足夠的簡單,通常一個週末就能學會
  • 編譯速度夠快
  • 內建併發(相對於 Java 的併發來說非常簡單)
  • 內建垃圾收集
  • 多平臺支援
  • 可以打包到一個二進位制檔案中,所有執行時需要依賴的庫都會被打包進這個二進位制檔案中,非常適合於分發。

Go 是一種編譯型的靜態型別語言,正確還是錯誤

正確✅

為什麼有些函式是以大寫字母開頭的

這是因為 Go 語言中首字母大寫的函式和變數是可以匯出的,也就是可以被其他包所引用;類似於 Java 中的 publicprivate 關鍵字。

變數和資料型別

簡潔和常規宣告變數方式

package main

import "fmt"

func main() {
  x := 2 // 只能在函式內使用,自動型別推導
  var y int = 2

  fmt.Printf("x: %v. y: %v", x, y)
}

正確✅還是錯誤❌

  • 可以重複宣告變數❌(強型別語言的特性)
  • 變數一旦宣告,就必須使用✅(避免宣告無效變數,增強程式碼可讀性)

下面這段程式碼的結果是什麼?

package main

import "fmt"

func main() {
    var userName
    userName = "user"
    fmt.Println(userName)
}

編譯錯誤,變數 userName 沒有宣告型別;修改為這樣是可以的:

func main() {
    var userName string
    userName = "user"
    fmt.Println(userName)
}

var x int = 2 and x := 2 這兩種宣告變數的區別

結果上來說是相等的,但 x := 2 只能在函式體類宣告。

下面這段程式碼的結果是宣告?

package main

import "fmt"

x := 2

func main() {
    x = 3
    fmt.Println(x)
}

編譯錯誤,x := 2 不能在函式體外使用, x = 3 沒有指定型別,除非使用 x := 3 進行型別推導。

如何使用變數宣告塊(至少三個變數)

package main

import "fmt"

var (
  x bool   = false
  y int    = 0
  z string = "false"
)

func main() {
  fmt.Printf("The type of x: %T. The value of x: %v\n", x, x)
  fmt.Printf("The type of y: %T. The value of y: %v\n", y, y)
  fmt.Printf("The type of z: %T. The value of z: %v\n", y, y)
}

變數塊配合 go fmt 格式化之後的程式碼對齊的非常工整,強迫症的福音。

Go 的基礎面試題也蠻多的,我們先從基礎的開始,今後後繼續更新相關面試題,難度也會逐漸提高,感興趣的朋友請持續關注。

GO #面試

相關文章