注:題目來源均出自牛客網。
一、選擇題
Map(集合)屬于Go的內置類型,不需要引入其它庫即可使用。
Go-Map_菜鳥教程
?
在函數聲明中,返回的參數要么都有變量名,要么都沒有。
C選項函數聲明語法有錯誤,error是返回類型,但沒有返回名。
?
go語言中字符串是UTF-8編碼并存儲的,它語言不定長的字節,所以它不支持下標操作,因為沒一個下標操作代表的是固定長度的字節,所以不能對字符串中某個字符單獨賦值。
Go-字符串_極客學院
?
由panic引發異常以后,程序停止執行,然后調用延遲函數(defer),就像程序正常退出一樣。另外recover也是要寫在延遲函數中的,如果發生異常延遲函數就不執行了,那就永遠無法recover了。
?
本題考查對協程與進程的理解,B選項應該是協程比線程更輕量。
進程和線程、協程的區別
?
Go語言的語法上是不支持指針運算的,所有指針都在可控的一個范圍內使用,沒有C語言的*void然后隨意轉換指針類型這樣的東西。
Go語言的指針 & *
?
字符串只有兩種直接表達的形式,一種是雙引號,一種是反引號。
A選項中的反引號是中文符號,編譯肯定會報錯。
?
golang 的 select 就是監聽 IO 操作,當 IO 操作發生時,觸發相應的動作;
在執行select語句的時候,運行時系統會自上而下地判斷每個case中的發送或接收操作是否可以被立即執行(立即執行:意思是當前Goroutine不會因此操作而被阻塞);
select的用法與switch非常類似,由select開始一個新的選擇塊,每個選擇條件由case語句來描述。與switch語句可以選擇任何可使用相等比較的條件相比,select有比較多的限制,其中最大的一條限制就是每個case語句里必須是一個IO操作,確切的說,應該是一個面向channel的IO操作。
Go語言中 select 和 switch 的比較
?
基本思路:將引用的外部包的源代碼放在當前工程的vendor目錄下面,go 1.6以后編譯go代碼會優先從vendor目錄先尋找依賴包。
它解決了避免項目代碼外部依賴過多,遷移后需要多次go get 外包依賴包;而且通過go get 重新拉去的外部依賴包的版本可能和工程開發時使用的不一致導致編譯錯誤的問題。
go vendor 介紹
?
布爾型變量應該賦值是true和false,正確答案應該是BCD。
Go編碼規范指南
?
二、參考資料
Go的異常處理 defer, panic, recover
go語言之 panic, recover ——如何在go語言中優雅的處理錯誤
https://golang.org/pkg/builtin/
從例子中學習 go 語言 —— 基本語法
從例子中學習 go 語言 —— 數據結構、指針
Go語言中的指針運算
Go語言并發模型:使用 select
golang的select典型用法
https://github.com/golang/go/wiki/CodeReviewComments
The Go Programming Language Specification
?
三、總結
本次Go語言練習主要涉及到異常處理、集合、函數聲明、對協程的理解、字符串連接、select機制、vendor和布爾型的編碼規范。
?