選擇題
[primary] 下面屬于關(guān)鍵字的是()
A. func
B. def
C. struct
D. class
參考答案:AC
[primary] 定義一個(gè)包內(nèi)全局字符串變量,下面語法正確的是 ()
A. var str string
B. str := ""
C. str = ""
D. var str = ""
參考答案:AD
[primary] 通過指針變量 p 訪問其成員變量 name,下面語法正確的是()
A. p.name
B. (*p).name
C. (&p).name
D. p->name
參考答案:AB
[primary] 關(guān)于接口和類的說法并村,下面說法正確的是()
A. 一個(gè)類只需要實(shí)現(xiàn)了接口要求的所有函數(shù)屿愚,我們就說這個(gè)類實(shí)現(xiàn)了該接口
B. 實(shí)現(xiàn)類的時(shí)候携茂,只需要關(guān)心自己應(yīng)該提供哪些方法澜搅,不用再糾結(jié)接口需要拆得多細(xì)才合理
C. 類實(shí)現(xiàn)接口時(shí)敞掘,需要導(dǎo)入接口所在的包
D. 接口由使用方按自身需求來定義越驻,使用方無需關(guān)心是否有其他模塊定義過類似的接口
參考答案:ABD
[primary] 關(guān)于字符串連接汁政,下面語法正確的是()
A. str := ‘a(chǎn)bc’ + ‘123’
B. str := "abc" + "123"
C. str := '123' + "abc"
D. fmt.Sprintf("abc%d", 123)
參考答案:BD
[primary] 關(guān)于協(xié)程,下面說法正確是()
A. 協(xié)程和線程都可以實(shí)現(xiàn)程序的并發(fā)執(zhí)行
B. 線程比協(xié)程更輕量級
C. 協(xié)程不存在死鎖問題
D. 通過channel來進(jìn)行協(xié)程間的通信
參考答案:AD
[intermediate] 關(guān)于init函數(shù)缀旁,下面說法正確的是()
A. 一個(gè)包中记劈,可以包含多個(gè)init函數(shù)
B. 程序編譯時(shí),先執(zhí)行導(dǎo)入包的init函數(shù)并巍,再執(zhí)行本包內(nèi)的init函數(shù)
C. main包中目木,不能有init函數(shù)
D. init函數(shù)可以被其他函數(shù)調(diào)用
參考答案:AB
[primary] 關(guān)于循環(huán)語句,下面說法正確的有()
A. 循環(huán)語句既支持for關(guān)鍵字履澳,也支持while和do-while
B. 關(guān)鍵字for的基本使用方法與C/C++中沒有任何差異
C. for循環(huán)支持continue和break來控制循環(huán)嘶窄,但是它提供了一個(gè)更高級的break,可以選擇中斷哪一個(gè)循環(huán)
D. for循環(huán)不支持以逗號為間隔的多個(gè)賦值語句距贷,必須使用平行賦值的方式來初始化多
個(gè)變量
參考答案:CD
[intermediate] 對于函數(shù)定義:
func add(args ...int) int {
? ? sum := 0
? ? for _, arg := range args {
? ? ? ? sum += arg
? ? }
? ? return sum
}
下面對add函數(shù)調(diào)用正確的是()
A. add(1, 2)
B. add(1, 3, 7)
C. add([]int{1, 2})
D. add([]int{1, 3, 7}...)
參考答案:ABD
[primary] 關(guān)于類型轉(zhuǎn)化柄冲,下面語法正確的是()
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
[primary] 關(guān)于局部變量的初始化,下面正確的使用方式是()
A. var i int = 10
B. var i = 10
C. i := 10
D. i = 10
參考答案:ABC
[primary] 關(guān)于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
[primary] 關(guān)于布爾變量b的賦值现横,下面錯(cuò)誤的用法是()
A. b = true
B. b = 1
C. b = bool(1)
D. b = (1 == 2)
參考答案:BC
[intermediate] 下面的程序的運(yùn)行結(jié)果是()
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
[primary] 關(guān)于switch語句,下面說法正確的有()
A. 條件表達(dá)式必須為常量或者整數(shù)
B. 單個(gè)case中阁最,可以出現(xiàn)多個(gè)結(jié)果選項(xiàng)
C. 需要用break來明確退出一個(gè)case
D. 只有在case中明確添加fallthrough關(guān)鍵字戒祠,才會繼續(xù)執(zhí)行緊跟的下一個(gè)case
參考答案:BD
[intermediate] golang中沒有隱藏的this指針,這句話的含義是()
A. 方法施加的對象顯式傳遞速种,沒有被隱藏起來
B. golang沿襲了傳統(tǒng)面向?qū)ο缶幊讨械闹T多概念姜盈,比如繼承、虛函數(shù)和構(gòu)造函數(shù)
C. golang的面向?qū)ο蟊磉_(dá)更直觀配阵,對于面向過程只是換了一種語法形式來表達(dá)
D. 方法施加的對象不需要非得是指針馏颂,也不用非得叫this
參考答案:ACD
[intermediate] golang中的引用類型包括()
A. 數(shù)組切片
B. map
C. channel
D. interface
參考答案:ABCD
[intermediate] golang中的指針運(yùn)算包括()
A. 可以對指針進(jìn)行自增或自減運(yùn)算
B. 可以通過“&”取指針的地址
C. 可以通過“*”取指針指向的數(shù)據(jù)
D. 可以對指針進(jìn)行下標(biāo)運(yùn)算
參考答案:BC
[primary] 關(guān)于main函數(shù)(可執(zhí)行程序的執(zhí)行起點(diǎn))示血,下面說法正確的是()
A. main函數(shù)不能帶參數(shù)
B. main函數(shù)不能定義返回值
C. main函數(shù)所在的包必須為main包
D. main函數(shù)中可以使用flag包來獲取和解析命令行參數(shù)
參考答案:ABCD
[intermediate] 下面賦值正確的是()
A. var x = nil
B. var x interface{} = nil
C. var x string = nil
D. var x error = nil
參考答案:BD
[intermediate] 關(guān)于整型切片的初始化,下面正確的是()
A. s := make([]int)
B. s := make([]int, 0)
C. s := make([]int, 5, 10)
D. s := []int{1, 2, 3, 4, 5}
參考答案:BCD
[intermediate] 從切片中刪除一個(gè)元素救拉,下面的算法實(shí)現(xiàn)正確的是()
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
[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
[primary] 關(guān)于變量的自增和自減操作,下面語句正確的是()
A.
i := 1
i++
B.
i := 1
j = i++
C.
i := 1
++i
D.
i := 1
i--
參考答案:AD
[intermediate] 關(guān)于函數(shù)聲明亿絮,下面語法錯(cuò)誤的是()
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
[intermediate] 如果Add函數(shù)的調(diào)用代碼為:
func main() {
? ? var a Integer = 1
? ? var b Integer = 2
? ? var i interface{} = &a
? ? sum := i.(*Integer).Add(b)
? ? fmt.Println(sum)
}
則Add函數(shù)定義正確的是()
A.
type Integer int
func (a Integer) Add(b Integer) Integer {
? ? return a + b
}
B.
type Integer int
func (a Integer) Add(b *Integer) Integer {
? ? return a + *b
}
C.
type Integer int
func (a *Integer) Add(b Integer) Integer {
? ? return *a + b
}
D.
type Integer int
func (a *Integer) Add(b *Integer) Integer {
? ? return *a + *b
}
參考答案:AC
[intermediate] 如果Add函數(shù)的調(diào)用代碼為:
func main() {
? ? var a Integer = 1
? ? var b Integer = 2
? ? var i interface{} = a
? ? sum := i.(Integer).Add(b)
? ? fmt.Println(sum)
}
則Add函數(shù)定義正確的是()
A.
type Integer int
func (a Integer) Add(b Integer) Integer {
? ? return a + b
}
B.
type Integer int
func (a Integer) Add(b *Integer) Integer {
? ? return a + *b
}
C.
type Integer int
func (a *Integer) Add(b Integer) Integer {
? ? return *a + b
}
D.
type Integer int
func (a *Integer) Add(b *Integer) Integer {
? ? return *a + *b
}
參考答案:A
[intermediate] 關(guān)于GetPodAction定義告喊,下面賦值正確的是()
type Fragment interface {
? ? Exec(transInfo *TransInfo) error
}
type GetPodAction struct {
}
func (g GetPodAction) Exec(transInfo *TransInfo) error {
? ? ...
? ? return nil
}
A. var fragment Fragment = new(GetPodAction)
B. var fragment Fragment = GetPodAction
C. var fragment Fragment = &GetPodAction{}
D. var fragment Fragment = GetPodAction{}
參考答案:ACD
[intermediate] 關(guān)于GoMock,下面說法正確的是()
A. GoMock可以對interface打樁
B. GoMock可以對類的成員函數(shù)打樁
C. GoMock可以對函數(shù)打樁
D. GoMock打樁后的依賴注入可以通過GoStub完成
參考答案:AD
[intermediate] 關(guān)于接口派昧,下面說法正確的是()
A. 只要兩個(gè)接口擁有相同的方法列表(次序不同不要緊)黔姜,那么它們就是等價(jià)的,可以相互賦值
B. 如果接口A的方法列表是接口B的方法列表的子集蒂萎,那么接口B可以賦值給接口A
C. 接口查詢是否成功地淀,要在運(yùn)行期才能夠確定
D. 接口賦值是否可行,要在運(yùn)行期才能夠確定
參考答案:ABC
[primary] 關(guān)于channel岖是,下面語法正確的是()
A. var ch chan int
B. ch := make(chan int)
C. <- ch
D. ch <-
參考答案:ABC
[primary] 關(guān)于同步鎖,下面說法正確的是()
A. 當(dāng)一個(gè)goroutine獲得了Mutex后实苞,其他goroutine就只能乖乖的等待豺撑,除非該goroutine釋放這個(gè)Mutex
B. RWMutex在讀鎖占用的情況下,會阻止寫黔牵,但不阻止讀
C. RWMutex在寫鎖占用情況下聪轿,會阻止任何其他goroutine(無論讀和寫)進(jìn)來,整個(gè)鎖相當(dāng)于由該goroutine獨(dú)占
D. Lock()操作需要保證有Unlock()或RUnlock()調(diào)用與之對應(yīng)
參考答案:ABC
[intermediate] golang中大多數(shù)數(shù)據(jù)類型都可以轉(zhuǎn)化為有效的JSON文本猾浦,下面幾種類型除外()
A. 指針
B. channel
C. complex
D. 函數(shù)
參考答案:BCD
[intermediate] 關(guān)于go vendor陆错,下面說法正確的是()
A. 基本思路是將引用的外部包的源代碼放在當(dāng)前工程的vendor目錄下面
B. 編譯go代碼會優(yōu)先從vendor目錄先尋找依賴包
C. 可以指定引用某個(gè)特定版本的外部包
D. 有了vendor目錄后,打包當(dāng)前的工程代碼到其他機(jī)器的$GOPATH/src下都可以通過編譯
參考答案:ABD
[primary] flag是bool型變量金赦,下面if表達(dá)式符合編碼規(guī)范的是()
A. if flag == 1
B. if flag
C. if flag == false
D. if !flag
參考答案:BD
[primary] value是整型變量音瓷,下面if表達(dá)式符合編碼規(guī)范的是()
A. if value == 0
B. if value
C. if value != 0
D. if !value
參考答案:AC
[intermediate] 關(guān)于函數(shù)返回值的錯(cuò)誤設(shè)計(jì),下面說法正確的是()
A. 如果失敗原因只有一個(gè)夹抗,則返回bool
B. 如果失敗原因超過一個(gè)绳慎,則返回error
C. 如果沒有失敗原因,則不返回bool或error
D. 如果重試幾次可以避免失敗漠烧,則不要立即返回bool或error
參考答案:ABCD
[intermediate] 關(guān)于異常設(shè)計(jì)杏愤,下面說法正確的是()
A. 在程序開發(fā)階段,堅(jiān)持速錯(cuò)已脓,讓程序異常崩潰
B. 在程序部署后珊楼,應(yīng)恢復(fù)異常避免程序終止
C. 一切皆錯(cuò)誤,不用進(jìn)行異常設(shè)計(jì)
D. 對于不應(yīng)該出現(xiàn)的分支度液,使用異常處理
參考答案:ABD
[intermediate] 關(guān)于slice或map操作厕宗,下面正確的是()
A.
var s []int
s = append(s,1)
B.
var m map[string]int
m["one"] = 1
C.
var s []int
s = make([]int, 0)
s = append(s,1)
D.
var m map[string]int
m = make(map[string]int)
m["one"] = 1
參考答案:ACD
[intermediate] 關(guān)于channel的特性画舌,下面說法正確的是()
A. 給一個(gè) nil channel 發(fā)送數(shù)據(jù),造成永遠(yuǎn)阻塞
B. 從一個(gè) nil channel 接收數(shù)據(jù)媳瞪,造成永遠(yuǎn)阻塞
C. 給一個(gè)已經(jīng)關(guān)閉的 channel 發(fā)送數(shù)據(jù)骗炉,引起 panic
D. 從一個(gè)已經(jīng)關(guān)閉的 channel 接收數(shù)據(jù),如果緩沖區(qū)中為空蛇受,則返回一個(gè)零值
參考答案:ABCD
[intermediate] 關(guān)于無緩沖和有沖突的channel句葵,下面說法正確的是()
A. 無緩沖的channel是默認(rèn)的緩沖為1的channel
B. 無緩沖的channel和有緩沖的channel都是同步的
C. 無緩沖的channel和有緩沖的channel都是非同步的
D. 無緩沖的channel是同步的,而有緩沖的channel是非同步的
參考答案:D
[intermediate] 關(guān)于異常的觸發(fā)兢仰,下面說法正確的是()
A. 空指針解析
B. 下標(biāo)越界
C. 除數(shù)為0
D. 調(diào)用panic函數(shù)
參考答案:ABCD
[intermediate] 關(guān)于cap函數(shù)的適用類型乍丈,下面說法正確的是()
A. array
B. slice
C. map
D. channel
參考答案:ABD
[intermediate] 關(guān)于beego框架,下面說法正確的是()
A. beego是一個(gè)golang實(shí)現(xiàn)的輕量級HTTP框架
B. beego可以通過注釋路由把将、正則路由等多種方式完成url路由注入
C. 可以使用bee new工具生成空工程轻专,然后使用bee run命令自動熱編譯
D. beego框架只提供了對url路由的處理, 而對于MVC架構(gòu)中的數(shù)據(jù)庫部分未提供框架支持
參考答案:ABC
[intermediate] 關(guān)于goconvey察蹲,下面說法正確的是()
A. goconvey是一個(gè)支持golang的單元測試框架
B. goconvey能夠自動監(jiān)控文件修改并啟動測試请垛,并可以將測試結(jié)果實(shí)時(shí)輸出到web界面
C. goconvey提供了豐富的斷言簡化測試用例的編寫
D. goconvey無法與go test集成
參考答案:ABC
[intermediate] 關(guān)于go vet,下面說法正確的是()
A. go vet是golang自帶工具go tool vet的封裝
B. 當(dāng)執(zhí)行g(shù)o vet database時(shí)洽议,可以對database所在目錄下的所有子文件夾進(jìn)行遞歸檢測
C. go vet可以使用絕對路徑宗收、相對路徑或相對GOPATH的路徑指定待檢測的包
D. go vet可以檢測出死代碼
參考答案:ACD
[intermediate] 關(guān)于map,下面說法正確的是()
A. map反序列化時(shí)json.unmarshal的入?yún)⒈仨殲閙ap的地址
B. 在函數(shù)調(diào)用中傳遞map亚兄,則子函數(shù)中對map元素的增加不會導(dǎo)致父函數(shù)中map的修改
C. 在函數(shù)調(diào)用中傳遞map混稽,則子函數(shù)中對map元素的修改不會導(dǎo)致父函數(shù)中map的修改
D. 不能使用內(nèi)置函數(shù)delete刪除map的元素
參考答案:A
[intermediate] 關(guān)于GoStub,下面說法正確的是()
A. GoStub可以對全局變量打樁
B. GoStub可以對函數(shù)打樁
C. GoStub可以對類的成員方法打樁
D. GoStub可以打動態(tài)樁审胚,比如對一個(gè)函數(shù)打樁后匈勋,多次調(diào)用該函數(shù)會有不同的行為
參考答案:ABD
[primary] 關(guān)于select機(jī)制,下面說法正確的是()
A. select機(jī)制用來處理異步IO問題
B. select機(jī)制最大的一條限制就是每個(gè)case語句里必須是一個(gè)IO操作
C. golang在語言級別支持select關(guān)鍵字
D. select關(guān)鍵字的用法與switch語句非常類似膳叨,后面要帶判斷條件
參考答案:ABC
[primary] 關(guān)于內(nèi)存泄露洽洁,下面說法正確的是()
A. golang有自動垃圾回收,不存在內(nèi)存泄露
B. golang中檢測內(nèi)存泄露主要依靠的是pprof包
C. 內(nèi)存泄露可以在編譯階段發(fā)現(xiàn)
D. 應(yīng)定期使用瀏覽器來查看系統(tǒng)的實(shí)時(shí)內(nèi)存信息懒鉴,及時(shí)發(fā)現(xiàn)內(nèi)存泄露問題
參考答案:BD
填空題
[primary] 聲明一個(gè)整型變量i__________
參考答案:var i int
[primary] 聲明一個(gè)含有10個(gè)元素的整型數(shù)組a__________
參考答案:var a [10]int
[primary] 聲明一個(gè)整型數(shù)組切片s__________
參考答案:var s []int
[primary] 聲明一個(gè)整型指針變量p__________
參考答案:var p *int
[primary] 聲明一個(gè)key為字符串型value為整型的map變量m__________
參考答案:var m map[string]int
[primary] 聲明一個(gè)入?yún)⒑头祷刂稻鶠檎偷暮瘮?shù)變量f__________
參考答案:var f func(a int) int
[primary] 聲明一個(gè)只用于讀取int數(shù)據(jù)的單向channel變量ch__________
參考答案:var ch <-chan int
[primary] 假設(shè)源文件的命名為slice.go诡挂,則測試文件的命名為__________
參考答案:slice_test.go
[primary] go test要求測試函數(shù)的前綴必須命名為__________
參考答案:Test
[intermediate] 下面的程序的運(yùn)行結(jié)果是__________
for i := 0; i < 5; i++ {
? ? defer fmt.Printf("%d ", i)
}
參考答案:4 3 2 1 0
[intermediate] 下面的程序的運(yùn)行結(jié)果是__________
func main() {
? ? x := 1
? ? {
? ? ? ? x := 2
? ? ? ? fmt.Print(x)
? ? }
? ? fmt.Println(x)
}
參考答案:21
[intermediate] 下面的程序的運(yùn)行結(jié)果是__________
func main() {
? ? strs := []string{"one", "two", "three"}
? ? for _, s := range strs {
? ? ? ? go func() {
? ? ? ? ? ? time.Sleep(1 * time.Second)
? ? ? ? ? ? fmt.Printf("%s ", s)
? ? ? ? }()
? ? }
? ? time.Sleep(3 * time.Second)
}
參考答案:three three three
[intermediate] 下面的程序的運(yùn)行結(jié)果是__________
func main() {?
? ? x := []string{"a", "b", "c"}
? ? for v := range x {
? ? ? ? fmt.Print(v)
? ? }
}
參考答案:012
[intermediate] 下面的程序的運(yùn)行結(jié)果是__________
func main() {?
? ? x := []string{"a", "b", "c"}
? ? for _, v := range x {
? ? ? ? fmt.Print(v)
? ? }
}
參考答案:abc
[primary] 下面的程序的運(yùn)行結(jié)果是__________
func main() {?
? ? i := 1
? ? j := 2
? ? i, j = j, i
? ? fmt.Printf("%d%d\n", i, j)
}
參考答案:21
[primary] 下面的程序的運(yùn)行結(jié)果是__________
func incr(p *int) int {
? ? *p++?
? ? return *p
}
func main() {?
? ? v := 1
? ? incr(&v)
? ? fmt.Println(v)
}
參考答案:2
[primary] 啟動一個(gè)goroutine的關(guān)鍵字是__________
參考答案:go
[intermediate] 下面的程序的運(yùn)行結(jié)果是__________
type Slice []int
func NewSlice() Slice {
? ? return make(Slice, 0)
}
func (s* Slice) Add(elem int) *Slice {
? ? *s = append(*s, elem)
? ? fmt.Print(elem)
? ? return s
}
func main() {?
? ? s := NewSlice()
? ? defer s.Add(1).Add(2)
? ? s.Add(3)
}
參考答案:132
判斷題
[primary] 數(shù)組是一個(gè)值類型()
參考答案:T
[primary] 使用map不需要引入任何庫()
參考答案:T
[intermediate] 內(nèi)置函數(shù)delete可以刪除數(shù)組切片內(nèi)的元素()
參考答案:F
[primary] 指針是基礎(chǔ)類型()
參考答案:F
[primary] interface{}是可以指向任意對象的Any類型()
參考答案:T
[intermediate] 下面關(guān)于文件操作的代碼可能觸發(fā)異常()
file, err := os.Open("test.go")
defer file.Close()
if err != nil {
? ? fmt.Println("open file failed:", err)
? ? return
}
...
參考答案:T
[primary] Golang不支持自動垃圾回收()
參考答案:F
[primary] Golang支持反射,反射最常見的使用場景是做對象的序列化()
參考答案:T
[primary] Golang可以復(fù)用C/C++的模塊临谱,這個(gè)功能叫Cgo()
參考答案:F
[primary] 下面代碼中兩個(gè)斜點(diǎn)之間的代碼璃俗,比如json:"x",作用是X字段在從結(jié)構(gòu)體實(shí)例編碼到JSON數(shù)據(jù)格式的時(shí)候悉默,使用x作為名字城豁,這可以看作是一種重命名的方式()
type Position struct {
? ? X int `json:"x"`
? ? Y int `json:"y"`
? ? Z int `json:"z"`
}
參考答案:T
[primary] 通過成員變量或函數(shù)首字母的大小寫來決定其作用域()
參考答案:T
[primary] 對于常量定義zero(const zero = 0.0),zero是浮點(diǎn)型常量()
參考答案:F
[primary] 對變量x的取反操作是~x()
參考答案:F
[primary] 下面的程序的運(yùn)行結(jié)果是xello()
func main() {
? ? str := "hello"
? ? str[0] = 'x'
? ? fmt.Println(str)
}
參考答案:F
[primary] golang支持goto語句()
參考答案:T
[primary] 下面代碼中的指針p為野指針抄课,因?yàn)榉祷氐臈?nèi)存在函數(shù)結(jié)束時(shí)會被釋放()
type TimesMatcher struct {
? ? base int
}
func NewTimesMatcher(base int) *TimesMatcher{
? ? return &TimesMatcher{base:base}
}
func main() {
? ? p := NewTimesMatcher(3)
? ? ...
}
參考答案:F
[primary] 匿名函數(shù)可以直接賦值給一個(gè)變量或者直接執(zhí)行()
參考答案:T
[primary] 如果調(diào)用方調(diào)用了一個(gè)具有多返回值的方法唱星,但是卻不想關(guān)心其中的某個(gè)返回值雳旅,可以簡單地用一個(gè)下劃線“_”來跳過這個(gè)返回值,該下劃線對應(yīng)的變量叫匿名變量()
參考答案:T
[primary] 在函數(shù)的多返回值中间聊,如果有error或bool類型攒盈,則一般放在最后一個(gè)()
參考答案:T
[primary] 錯(cuò)誤是業(yè)務(wù)過程的一部分,而異常不是()
參考答案:T
[primary] 函數(shù)執(zhí)行時(shí)哎榴,如果由于panic導(dǎo)致了異常型豁,則延遲函數(shù)不會執(zhí)行()
參考答案:F? ?
[intermediate] 當(dāng)程序運(yùn)行時(shí),如果遇到引用空指針尚蝌、下標(biāo)越界或顯式調(diào)用panic函數(shù)等情況迎变,則先觸發(fā)panic函數(shù)的執(zhí)行,然后調(diào)用延遲函數(shù)飘言。調(diào)用者繼續(xù)傳遞panic衣形,因此該過程一直在調(diào)用棧中重復(fù)發(fā)生:函數(shù)停止執(zhí)行,調(diào)用延遲執(zhí)行函數(shù)姿鸿。如果一路在延遲函數(shù)中沒有recover函數(shù)的調(diào)用谆吴,則會到達(dá)該攜程的起點(diǎn),該攜程結(jié)束苛预,然后終止其他所有攜程纪铺,其他攜程的終止過程也是重復(fù)發(fā)生:函數(shù)停止執(zhí)行,調(diào)用延遲執(zhí)行函數(shù)()
參考答案:F? ?
[primary] 同級文件的包名不允許有多個(gè)()
參考答案:T? ?
[intermediate] 可以給任意類型添加相應(yīng)的方法()
參考答案:F
[primary] golang雖然沒有顯式的提供繼承語法碟渺,但是通過匿名組合實(shí)現(xiàn)了繼承()
參考答案:T
[primary] 使用for range迭代map時(shí)每次迭代的順序可能不一樣,因?yàn)閙ap的迭代是隨機(jī)的()
參考答案:T
[primary] switch后面可以不跟表達(dá)式()
參考答案:T
[intermediate] 結(jié)構(gòu)體在序列化時(shí)非導(dǎo)出變量(以小寫字母開頭的變量名)不會被encode突诬,因此在decode時(shí)這些非導(dǎo)出變量的值為其類型的零值()
參考答案:T
[primary] golang中沒有構(gòu)造函數(shù)的概念苫拍,對象的創(chuàng)建通常交由一個(gè)全局的創(chuàng)建函數(shù)來完成,以NewXXX來命名()
參考答案:T
[intermediate] 當(dāng)函數(shù)deferDemo返回失敗時(shí)旺隙,并不能destroy已create成功的資源()
func deferDemo() error {
? ? err := createResource1()
? ? if err != nil {
? ? ? ? return ERR_CREATE_RESOURCE1_FAILED
? ? }
? ? defer func() {
? ? ? ? if err != nil {
? ? ? ? ? ? destroyResource1()
? ? ? ? }
? ? }()
? ? err = createResource2()
? ? if err != nil {
? ? ? ? return ERR_CREATE_RESOURCE2_FAILED
? ? }
? ? defer func() {
? ? ? ? if err != nil {
? ? ? ? ? ? destroyResource2()
? ? ? ? }
? ? }()
? ? err = createResource3()
? ? if err != nil {
? ? ? ? return ERR_CREATE_RESOURCE3_FAILED
? ? }
? ? return nil
}
參考答案:F
[intermediate] channel本身必然是同時(shí)支持讀寫的绒极,所以不存在單向channel()
參考答案:F
[primary] import后面的最后一個(gè)元素是包名()
參考答案:F
作者:_張曉龍_
鏈接:http://www.reibang.com/p/f690203ff168
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)蔬捷,非商業(yè)轉(zhuǎn)載請注明出處垄提。