聊聊Golang 基礎面試題,你學會幾個?
在之前的文章中分享了 k8s 相關的面試題,本文我們重點來討論和 k8s 密切相關的 Go 語言面試題。
這幾年隨著云原生的興起,大部分后端開發者,特別是 Java 開發者都或多或少的想學習一些 Go 相關的技能,所以今天分享的內容比較初級,適合 Go 語言初學者。
本文內容依然來自于這個倉庫https://github.com/bregman-arie/devops-exercises
以下是具體內容:
()的內容是我的補充部分。
Go 101
Go 語言有哪些特點
- Go 是一種強類型靜態語言,變量的類型必須在聲明的時候指定(但可以使用類型推導),在運行時不能修改變量類型(與 Python 這類動態類型語言不同)。
- 足夠的簡單,通常一個周末就能學會
- 編譯速度夠快
- 內置并發(相對于 Java 的并發來說非常簡單)
- 內置垃圾收集
- 多平臺支持
- 可以打包到一個二進制文件中,所有運行時需要依賴的庫都會被打包進這個二進制文件中,非常適合于分發。
Go 是一種編譯型的靜態類型語言,正確還是錯誤
正確?
為什么有些函數是以大寫字母開頭的
這是因為 Go 語言中首字母大寫的函數和變量是可以導出的,也就是可以被其他包所引用;類似于 Java 中的 public 和 private 關鍵字。
變量和數據類型
簡潔和常規聲明變量方式
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 格式化之后的代碼對齊的非常工整,強迫癥的福音。