Go 筆試題精選一: 25 道選擇題

題目難易程度定義:

HAbwXk

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