go channel 缓冲区最大限制_一起攻克面试难关:Go 面试每天一篇(第 40 天)
你好哇,歡迎來答題,一起來看下昨天題目的解析:
1.關于無緩沖和有沖突的channel,下面說法正確的是?
A. 無緩沖的channel是默認的緩沖為1的channel;
B. 無緩沖的channel和有緩沖的channel都是同步的;
C. 無緩沖的channel和有緩沖的channel都是非同步的;
D. 無緩沖的channel是同步的,而有緩沖的channel是非同步的;
參考答案及解析:D。參考文章《Go 并發 -- 信道》
2.下面代碼是否能編譯通過?如果通過,輸出什么?
1func?Foo(x?interface{})?{2????if?x?==?nil?{
3????????fmt.Println("empty?interface")
4????????return
5????}
6????fmt.Println("non-empty?interface")
7}
8func?main()?{
9????var?x?*int?=?nil
10????Foo(x)
11}
參考答案及解析:non-empty interface 考點:interface 的內部結構,我們知道接口除了有靜態類型,還有動態類型和動態值,當且僅當動態值和動態類型都為 nil 時,接口類型值才為 nil。這里的 x 的動態類型是 *int,所以 x 不為 nil。
3.下面代碼輸出什么?
1func?main()?{2????ch?:=?make(chan?int,?100)
3????//?A
4????go?func()?{??????????????
5????????for?i?:=?0;?i?10;?i++?{
6????????????ch? 7????????}
8????}()
9????//?B
10????go?func()?{
11????????for?{
12????????????a,?ok?:=?13????????????if?!ok?{
14????????????????fmt.Println("close")
15????????????????return
16????????????}
17????????????fmt.Println("a:?",?a)
18????????}
19????}()
20????close(ch)
21????fmt.Println("ok")
22????time.Sleep(time.Second?*?10)
23}
參考答案及解析:程序拋異常。先定義下,第一個協程為 A 協程,第二個協程為 B 協程;當 A 協程還沒起時,主協程已經將 channel 關閉了,當 A 協程往關閉的 channel 發送數據時會 panic,panic: send on closed channel。
解析若有不妥之處,歡迎在留言區交流、指正!
看下今天的題目:
1.關于select機制,下面說法正確的是?
A. select機制用來處理異步IO問題;
B. select機制最大的一條限制就是每個case語句里必須是一個IO操作;
C. golang在語言級別支持select關鍵字;
D. select關鍵字的用法與switch語句非常類似,后面要帶判斷條件;
2.下面的代碼有什么問題?
1func?Stop(stop?chan?bool)?{2????close(stop)
3}
3.下面這段代碼存在什么問題?
1type?Param?map[string]interface{}2
3type?Show?struct?{
4????*Param
5}
6
7func?main()?{
8????s?:=?new(Show)
9????s.Param["day"]?=?2
10}
答案以及解析會在下一篇文章中給出,鼓勵大家在留言區留下答案,抱團學習,日拱一卒,每天進步一點!
ps:看完文章如果有收獲,順手花 1s 時間幫點下文末右下方的「在看」,感激!
所有學習上的成功,都只依靠兩件事 -- 策略和堅持,而堅持本身就是最重要的策略!
推薦閱讀:
一起攻克面試難關:Go 面試每天一篇(第 39 天)
給Go程序加入編譯版本時間等信息
如果我的文章對你有所幫助,點贊、轉發都是一種支持!
給個[在看],是對我最大的支持總結
以上是生活随笔為你收集整理的go channel 缓冲区最大限制_一起攻克面试难关:Go 面试每天一篇(第 40 天)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android获取所有应用的资源id和对
- 下一篇: idea会不定时闪屏_显示器闪屏什么原因