Go 筆試題精選一: 25 道選擇題
題目難易程度定義:
1、[primary] 下面屬於關鍵字的是()
A. func
B. def
C. struct
D. class
參考答案:AC
2、[primary] 定義一個包內全局字符串變量,下面語法正確的是 ()
A. var str string
B. str := ""
C. str = ""
D. var str = ""
參考答案:AD
3、[primary] 通過指針變量 p 訪問其成員變量 name,下面語法正確的是()
A. p.name
B. (*p).name
C. (&p).name
D. p->name
參考答案:AB
4、[primary] 關於接口和類的說法,下面說法正確的是()
A. 一個類只需要實現了接口要求的所有函數,我們就說這個類實現了該接口
B. 實現類的時候,只需要關心自己應該提供哪些方法,不用再糾結接口需要拆得多細才合理
C. 類實現接口時,需要導入接口所在的包
D. 接口由使用方按自身需求來定義,使用方無需關心是否有其他模塊定義過類似的接口
參考答案:ABD
5、[primary] 關於字符串連接,下面語法正確的是()
A. str := ‘abc’ + ‘123’
B. str := "abc" + "123"
C. str := '123' + "abc"
D. fmt.Sprintf("abc%d", 123)
參考答案:BD
6、[primary] 關於協程,下面說法正確是()
A. 協程和線程都可以實現程序的併發執行
B. 線程比協程更輕量級
C. 協程不存在死鎖問題
D. 通過 channel 來進行協程間的通信
參考答案:AD
7、[intermediate] 關於 init 函數,下面說法正確的是()
A. 一個包中,可以包含多個 init 函數
B. 程序編譯時,先執行導入包的 init 函數,再執行本包內的 init 函數
C. main 包中,不能有 init 函數
D. init 函數可以被其他函數調用
參考答案:AB
8、[primary] 關於循環語句,下面說法正確的有()
A. 循環語句既支持 for 關鍵字,也支持 while 和 do-while
B. 關鍵字 for 的基本使用方法與 C/C++ 中沒有任何差異
C. for 循環支持 continue 和 break 來控制循環,但是它提供了一個更高級的 break,可以選擇中斷哪一個循環
D. for 循環不支持以逗號爲間隔的多個賦值語句,必須使用平行賦值的方式來初始化多 個變量
參考答案:CD
9、[intermediate] 對於函數定義:
func add(args ...int) int {
sum := 0
for _, arg := range args {
sum += arg
}
return sum
}
下面對 add 函數調用正確的是()
A. add(1, 2)
B. add(1, 3, 7)
C. add([]int{1, 2})
D. add([]int{1, 3, 7}...)
參考答案:ABD
10、[primary] 關於類型轉化,下面語法正確的是() A.
type MyInt int
var i int = 1
var j MyInt = i
B.
type MyInt int
var i int = 1
var j MyInt = (MyInt)i
C.
type MyInt int
var i int = 1
var j MyInt = MyInt(i)
D.
type MyInt int
var i int = 1
var j MyInt = i.(MyInt)
參考答案:C
11、[primary] 關於局部變量的初始化,下面正確的使用方式是()
A. var i int = 10
B. var i = 10
C. i := 10
D. i = 10
參考答案:ABC
12、[primary] 關於 const 常量定義,下面正確的使用方式是()
A.
const Pi float64 = 3.14159265358979323846
const zero = 0.0
B.
const (
size int64 = 1024
eof = -1
)
C.
const (
ERR_ELEM_EXIST error = errors.New("element already exists")
ERR_ELEM_NT_EXIST error = errors.New("element not exists")
)
D.
const u, v float32 = 0, 3
const a, b, c = 3, 4, "foo"
參考答案:ABD
13、[primary] 關於布爾變量 b 的賦值,下面錯誤的用法是()
A. b = true
B. b = 1
C. b = bool(1)
D. b = (1 == 2)
參考答案:BC
14、[intermediate] 下面的程序的運行結果是()
func main() {
if (true) {
defer fmt.Printf("1")
} else {
defer fmt.Printf("2")
}
fmt.Printf("3")
}
A. 321
B. 32
C. 31
D. 13
參考答案:C
15、[primary] 關於 switch 語句,下面說法正確的有()
A. 條件表達式必須爲常量或者整數
B. 單個 case 中,可以出現多個結果選項
C. 需要用 break 來明確退出一個 case
D. 只有在 case 中明確添加 fallthrough 關鍵字,纔會繼續執行緊跟的下一個 case
參考答案:BD
16、[intermediate] golang 中沒有隱藏的 this 指針,這句話的含義是()
A. 方法施加的對象顯式傳遞,沒有被隱藏起來
B. golang 沿襲了傳統面向對象編程中的諸多概念,比如繼承、虛函數和構造函數
C. golang 的面向對象表達更直觀,對於面向過程只是換了一種語法形式來表達
D. 方法施加的對象不需要非得是指針,也不用非得叫 this
參考答案:ACD
17、[intermediate] golang 中的引用類型包括()
A. 數組切片
B. map
C. channel
D. interface
參考答案:ABCD
18、[intermediate] golang 中的指針運算包括()
A. 可以對指針進行自增或自減運算
B. 可以通過 “&” 取指針的地址
C. 可以通過 “*” 取指針指向的數據
D. 可以對指針進行下標運算
參考答案:BC
19、[primary] 關於 main 函數(可執行程序的執行起點),下面說法正確的是()
A. main 函數不能帶參數
B. main 函數不能定義返回值
C. main 函數所在的包必須爲 main 包
D. main 函數中可以使用 flag 包來獲取和解析命令行參數
參考答案:ABCD
20、[intermediate] 下面賦值正確的是()
A. var x = nil
B. var x interface{} = nil
C. var x string = nil
D. var x error = nil
參考答案:BD
21、[intermediate] 關於整型切片的初始化,下面正確的是()
A. s := make([]int)
B. s := make([]int, 0)
C. s := make([]int, 5, 10)
D. s := []int{1, 2, 3, 4, 5}
參考答案:BCD
22、[intermediate] 從切片中刪除一個元素,下面的算法實現正確的是()
A.
func (s *Slice)Remove(value interface{}) error {
for i, v := range *s {
if isEqual(value, v) {
if i== len(*s) - 1 {
*s = (*s)[:i]
}else {
*s = append((*s)[:i],(*s)[i + 2:]...)
}
return nil
}
}
return ERR_ELEM_NT_EXIST
}
B.
func (s *Slice)Remove(value interface{}) error {
for i, v := range *s {
if isEqual(value, v) {
*s = append((*s)[:i],(*s)[i + 1:])
return nil
}
}
return ERR_ELEM_NT_EXIST
}
C.
func (s *Slice)Remove(value interface{}) error {
for i, v := range *s {
if isEqual(value, v) {
delete(*s, v)
return nil
}
}
return ERR_ELEM_NT_EXIST
}
D.
func (s *Slice)Remove(value interface{}) error {
for i, v := range *s {
if isEqual(value, v) {
*s = append((*s)[:i],(*s)[i + 1:]...)
return nil
}
}
return ERR_ELEM_NT_EXIST
}
參考答案:D
23、[primary] 對於局部變量整型切片 x 的賦值,下面定義正確的是()
A.
x := []int{
1, 2, 3,
4, 5, 6,
}
B.
x := []int{
1, 2, 3,
4, 5, 6
}
C.
x := []int{
1, 2, 3,
4, 5, 6}
D.
x := []int{1, 2, 3, 4, 5, 6,}
參考答案:ACD
24、[primary] 關於變量的自增和自減操作,下面語句正確的是()
A.
i := 1
i++
B.
i := 1
j = i++
C.
i := 1
++i
D.
i := 1
i--
參考答案:AD
25、[intermediate] 關於函數聲明,下面語法錯誤的是()
A. func f(a, b int) (value int, err error)
B. func f(a int, b int) (value int, err error)
C. func f(a, b int) (value int, error)
D. func f(a int, b int) (int, int, error)
參考答案:C
來源:https://www.jianshu.com/p/f690203ff168
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/akJLEx_pllOFvR27ICl2mQ