<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                Golang精編100題 能力模型 | 級別 | 模型 | | --- | --- | | 初級 primary | 熟悉基本語法,能夠看懂代碼的意圖; 在他人指導下能夠完成用戶故事的開發,編寫的代碼符合CleanCode規范; | |中級 intermediate|能夠獨立完成用戶故事的開發和測試;能夠嗅出代碼的壞味道,并知道如何重構達成目標;| |高級 senior|能夠開發出高質量高性能的代碼;能夠熟練使用高級特性,開發編程框架或測試框架;| 【初級】 選擇題: 1、下面屬于關鍵字的是() ~~~ A. func B. def C. struct D. class ~~~ 參考答案:AC 2、定義一個包內全局字符串變量,下面語法正確的是 () ~~~ A. var str string B. str := "" C. str = "" D. var str = "" ~~~ 參考答案:AD 3、通過指針變量 p 訪問其成員變量 name,下面語法正確的是() ~~~ A. p.name B. (*p).name C. (&p).name D. p->name ~~~ 參考答案:AB 4、關于接口和類的說法,下面說法正確的是() ~~~ A. 一個類只需要實現了接口要求的所有函數,我們就說這個類實現了該接口 B. 實現類的時候,只需要關心自己應該提供哪些方法,不用再糾結接口需要拆得多細才合理 C. 類實現接口時,需要導入接口所在的包 D. 接口由使用方按自身需求來定義,使用方無需關心是否有其他模塊定義過類似的接口 ~~~ 參考答案:ABD 5、關于字符串連接,下面語法正確的是() ~~~ A. str := ‘abc’ + ‘123’ B. str := "abc" + "123" C. str := '123' + "abc" D. fmt.Sprintf("abc%d", 123) ~~~ 參考答案:BD 6、關于協程,下面說法正確是() ~~~ A. 協程和線程都可以實現程序的并發執行 B. 線程比協程更輕量級 C. 協程不存在死鎖問題 D. 通過channel來進行協程間的通信 ~~~ 參考答案:AD 7、關于循環語句,下面說法正確的有() ~~~ A. 循環語句既支持for關鍵字,也支持while和do-while B. 關鍵字for的基本使用方法與C/C++中沒有任何差異 C. for循環支持continue和break來控制循環,但是它提供了一個更高級的break,可以選擇中斷哪一個循環 D. for循環不支持以逗號為間隔的多個賦值語句,必須使用平行賦值的方式來初始化多個變量 ~~~ 參考答案:CD 8、對于函數定義: ~~~ 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 9、關于類型轉化,下面語法正確的是() ~~~ 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 10、關于局部變量的初始化,下面正確的使用方式是() ~~~ A. var i int = 10 B. var i = 10 C. i := 10 D. i = 10 ~~~ 參考答案:ABC 11、關于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 12、關于布爾變量b的賦值,下面錯誤的用法是() ~~~ A. b = true B. b = 1 C. b = bool(1) D. b = (1 == 2) ~~~ 參考答案:BC 13、關于switch語句,下面說法正確的有() ~~~ A. 條件表達式必須為常量或者整數 B. 單個case中,可以出現多個結果選項 C. 需要用break來明確退出一個case D. 只有在case中明確添加fallthrough關鍵字,才會繼續執行緊跟的下一個case ~~~ 參考答案:BD 14、關于main函數(可執行程序的執行起點),下面說法正確的是() ~~~ A. main函數不能帶參數 B. main函數不能定義返回值 C. main函數所在的包必須為main包 D. main函數中可以使用flag包來獲取和解析命令行參數 ~~~ 參考答案:ABCD 15、對于局部變量整型切片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 16、關于變量的自增和自減操作,下面語句正確的是() ~~~ A. i := 1 i++ B. i := 1 j = i++ C. i := 1 ++i D. i := 1 i-- ~~~ 參考答案:AD 17、關于channel,下面語法正確的是() ~~~ A. var ch chan int B. ch := make(chan int) C. <- ch D. ch <- ~~~ 參考答案:ABC 18、關于同步鎖,下面說法正確的是() ~~~ A. 當一個goroutine獲得了Mutex后,其他goroutine就只能乖乖的等待,除非該goroutine釋放這個Mutex B. RWMutex在讀鎖占用的情況下,會阻止寫,但不阻止讀 C. RWMutex在寫鎖占用情況下,會阻止任何其他goroutine(無論讀和寫)進來,整個鎖相當于由該goroutine獨占 D. Lock()操作需要保證有Unlock()或RUnlock()調用與之對應 ~~~ 參考答案:ABC 19、flag是bool型變量,下面if表達式符合編碼規范的是() ~~~ A. if flag == 1 B. if flag C. if flag == false D. if !flag ~~~ 參考答案:BD 20、value是整型變量,下面if表達式符合編碼規范的是() ~~~ A. if value == 0 B. if value C. if value != 0 D. if !value ~~~ 參考答案:AC 21、關于select機制,下面說法正確的是() ~~~ A. select機制用來處理異步IO問題 B. select機制最大的一條限制就是每個case語句里必須是一個IO操作 C. golang在語言級別支持select關鍵字 D. select關鍵字的用法與switch語句非常類似,后面要帶判斷條件 ~~~ 參考答案:ABC 22、關于內存泄露,下面說法正確的是() ~~~ A. golang有自動垃圾回收,不存在內存泄露 B. golang中檢測內存泄露主要依靠的是pprof包 C. 內存泄露可以在編譯階段發現 D. 應定期使用瀏覽器來查看系統的實時內存信息,及時發現內存泄露問題 ~~~ 參考答案:BD 填空題 1、聲明一個整型變量i__________ 參考答案: ~~~ var i int ~~~ 2、聲明一個含有10個元素的整型數組a__________ 參考答案: ~~~ var a [10]int ~~~ 3、聲明一個整型數組切片s__________ 參考答案: ~~~ var s []int ~~~ 4、聲明一個整型指針變量p__________ 參考答案: ~~~ var p *int ~~~ 5、聲明一個key為字符串型value為整型的map變量m__________ 參考答案: ~~~ var m map[string]int ~~~ 6、聲明一個入參和返回值均為整型的函數變量f__________ 參考答案: ~~~ var f func(a int) int ~~~ 7、聲明一個只用于讀取int數據的單向channel變量ch__________ 參考答案: ~~~ var ch <-chan int ~~~ 8、假設源文件的命名為slice.go,則測試文件的命名為__________ 參考答案: ~~~ slice_test.go ~~~ 9、go test要求測試函數的前綴必須命名為__________ 參考答案: ~~~ Test ~~~ 10、下面的程序的運行結果是__________ ~~~ func main() { i := 1 j := 2 i, j = j, i fmt.Printf("%d%d\n", i, j) } ~~~ 參考答案: ~~~ 21 ~~~ 11、下面的程序的運行結果是__________ ~~~ func incr(p *int) int { *p++ return *p } func main() { v := 1 incr(&v) fmt.Println(v) } ~~~ 參考答案: ~~~ 2 ~~~ 12、啟動一個goroutine的關鍵字是__________ 參考答案: ~~~ go ~~~ 判斷題 1、數組是一個值類型() 參考答案:T 2、使用map不需要引入任何庫() 參考答案:T 3、指針是基礎類型() 參考答案:F 4、interface{}是可以指向任意對象的Any類型() 參考答案:T 5、Golang不支持自動垃圾回收() 參考答案:F 6、Golang支持反射,反射最常見的使用場景是做對象的序列化() 參考答案:T 7、Golang可以復用C/C++的模塊,這個功能叫Cgo() 參考答案:F 8、下面代碼中兩個斜點之間的代碼,比如json:"x",作用是X字段在從結構體實例編碼到JSON數據格式的時候,使用x作為名字,這可以看作是一種重命名的方式() ~~~ type Position struct { X int `json:"x"` Y int `json:"y"` Z int `json:"z"` } ~~~ 參考答案:T 9、通過成員變量或函數首字母的大小寫來決定其作用域() 參考答案:T 10、對于常量定義zero(const zero = 0.0),zero是浮點型常量() 參考答案:F 11、對變量x的取反操作是~x() 參考答案:F 12、下面的程序的運行結果是xello() ~~~ func main() { str := "hello" str[0] = 'x' fmt.Println(str) } ~~~ 參考答案:F 13、golang支持goto語句() 參考答案:T 14、下面代碼中的指針p為野指針,因為返回的棧內存在函數結束時會被釋放() ~~~ type TimesMatcher struct { base int } func NewTimesMatcher(base int) *TimesMatcher{ return &TimesMatcher{base:base} } func main() { p := NewTimesMatcher(3) ... } ~~~ 參考答案:F 15、匿名函數可以直接賦值給一個變量或者直接執行() 參考答案:T 16、如果調用方調用了一個具有多返回值的方法,但是卻不想關心其中的某個返回值,可以簡單地用一個下劃線“_”來跳過這個返回值,該下劃線對應的變量叫匿名變量() 參考答案:T 17、在函數的多返回值中,如果有error或bool類型,則一般放在最后一個() 參考答案:T 18、錯誤是業務過程的一部分,而異常不是() 參考答案:T 19、函數執行時,如果由于panic導致了異常,則延遲函數不會執行() 參考答案:F 20、同級文件的包名不允許有多個() 參考答案:T 21、golang雖然沒有顯式的提供繼承語法,但是通過匿名組合實現了繼承() 參考答案:T 22、使用for range迭代map時每次迭代的順序可能不一樣,因為map的迭代是隨機的() 參考答案:T 23、switch后面可以不跟表達式() 參考答案:T 24、golang中沒有構造函數的概念,對象的創建通常交由一個全局的創建函數來完成,以NewXXX來命名() 參考答案:T 25、import后面的最后一個元素是包名() 參考答案:F 【中級】 選擇題 1、關于init函數,下面說法正確的是() ~~~ A. 一個包中,可以包含多個init函數 B. 程序編譯時,先執行導入包的init函數,再執行本包內的init函數 C. main包中,不能有init函數 D. init函數可以被其他函數調用 ~~~ 參考答案:AB 2、下面的程序的運行結果是() ~~~ 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 3、golang中沒有隱藏的this指針,這句話的含義是() ~~~ A. 方法施加的對象顯式傳遞,沒有被隱藏起來 B. golang沿襲了傳統面向對象編程中的諸多概念,比如繼承、虛函數和構造函數 C. golang的面向對象表達更直觀,對于面向過程只是換了一種語法形式來表達 D. 方法施加的對象不需要非得是指針,也不用非得叫this ~~~ 參考答案:ACD 4、golang中的引用類型包括() ~~~ A. 數組切片 B. map C. channel D. interface ~~~ 參考答案:ABCD 5、golang中的指針運算包括() ~~~ A. 可以對指針進行自增或自減運算 B. 可以通過“&”取指針的地址 C. 可以通過“*”取指針指向的數據 D. 可以對指針進行下標運算 ~~~ 參考答案:BC 6、下面賦值正確的是() ~~~ A. var x = nil B. var x interface{} = nil C. var x string = nil D. var x error = nil ~~~ 參考答案:BD 7、關于整型切片的初始化,下面正確的是() ~~~ A. s := make([]int) B. s := make([]int, 0) C. s := make([]int, 5, 10) D. s := []int{1, 2, 3, 4, 5} ~~~ 參考答案:BCD 8、從切片中刪除一個元素,下面的算法實現正確的是() ~~~ 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 9、關于函數聲明,下面語法錯誤的是() ~~~ 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 10、如果Add函數的調用代碼為: ~~~ func main() { var a Integer = 1 var b Integer = 2 var i interface{} = &a sum := i.(*Integer).Add(b) fmt.Println(sum) } ~~~ 則Add函數定義正確的是() ~~~ 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 11、如果Add函數的調用代碼為: ~~~ func main() { var a Integer = 1 var b Integer = 2 var i interface{} = a sum := i.(Integer).Add(b) fmt.Println(sum) } ~~~ 則Add函數定義正確的是() ~~~ 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 12、關于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 13、關于GoMock,下面說法正確的是() ~~~ A. GoMock可以對interface打樁 B. GoMock可以對類的成員函數打樁 C. GoMock可以對函數打樁 D. GoMock打樁后的依賴注入可以通過GoStub完成 ~~~ 參考答案:AD 14、關于接口,下面說法正確的是() ~~~ A. 只要兩個接口擁有相同的方法列表(次序不同不要緊),那么它們就是等價的,可以相互賦值 B. 如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以賦值給接口A C. 接口查詢是否成功,要在運行期才能夠確定 D. 接口賦值是否可行,要在運行期才能夠確定 ~~~ 參考答案:ABC 15、golang中大多數數據類型都可以轉化為有效的JSON文本,下面幾種類型除外() ~~~ A. 指針 B. channel C. complex D. 函數 ~~~ 參考答案:BCD 16、關于go vendor,下面說法正確的是() ~~~ A. 基本思路是將引用的外部包的源代碼放在當前工程的vendor目錄下面 B. 編譯go代碼會優先從vendor目錄先尋找依賴包 C. 可以指定引用某個特定版本的外部包 D. 有了vendor目錄后,打包當前的工程代碼到其他機器的$GOPATH/src下都可以通過編譯 ~~~ 參考答案:ABD 17、關于函數返回值的錯誤設計,下面說法正確的是() ~~~ A. 如果失敗原因只有一個,則返回bool B. 如果失敗原因超過一個,則返回error C. 如果沒有失敗原因,則不返回bool或error D. 如果重試幾次可以避免失敗,則不要立即返回bool或error ~~~ 參考答案:ABCD 18、關于異常設計,下面說法正確的是() ~~~ A. 在程序開發階段,堅持速錯,讓程序異常崩潰 B. 在程序部署后,應恢復異常避免程序終止 C. 一切皆錯誤,不用進行異常設計 D. 對于不應該出現的分支,使用異常處理 ~~~ 參考答案:ABD 19、關于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 20、關于channel的特性,下面說法正確的是() ~~~ A. 給一個 nil channel 發送數據,造成永遠阻塞 B. 從一個 nil channel 接收數據,造成永遠阻塞 C. 給一個已經關閉的 channel 發送數據,引起 panic D. 從一個已經關閉的 channel 接收數據,如果緩沖區中為空,則返回一個零值 ~~~ 參考答案:ABCD 21、關于無緩沖和有沖突的channel,下面說法正確的是() ~~~ A. 無緩沖的channel是默認的緩沖為1的channel B. 無緩沖的channel和有緩沖的channel都是同步的 C. 無緩沖的channel和有緩沖的channel都是非同步的 D. 無緩沖的channel是同步的,而有緩沖的channel是非同步的 ~~~ 參考答案:D 22、關于異常的觸發,下面說法正確的是() ~~~ A. 空指針解析 B. 下標越界 C. 除數為0 D. 調用panic函數 ~~~ 參考答案:ABCD 23、關于cap函數的適用類型,下面說法正確的是() ~~~ A. array B. slice C. map D. channel ~~~ 參考答案:ABD 24、關于beego框架,下面說法正確的是() ~~~ A. beego是一個golang實現的輕量級HTTP框架 B. beego可以通過注釋路由、正則路由等多種方式完成url路由注入 C. 可以使用bee new工具生成空工程,然后使用bee run命令自動熱編譯 D. beego框架只提供了對url路由的處理, 而對于MVC架構中的數據庫部分未提供框架支持 ~~~ 參考答案:ABC 25、關于goconvey,下面說法正確的是() ~~~ A. goconvey是一個支持golang的單元測試框架 B. goconvey能夠自動監控文件修改并啟動測試,并可以將測試結果實時輸出到web界面 C. goconvey提供了豐富的斷言簡化測試用例的編寫 D. goconvey無法與go test集成 ~~~ 參考答案:ABC 26、關于go vet,下面說法正確的是() ~~~ A. go vet是golang自帶工具go tool vet的封裝 B. 當執行go vet database時,可以對database所在目錄下的所有子文件夾進行遞歸檢測 C. go vet可以使用絕對路徑、相對路徑或相對GOPATH的路徑指定待檢測的包 D. go vet可以檢測出死代碼 ~~~ 參考答案:ACD 27、關于map,下面說法正確的是() ~~~ A. map反序列化時json.unmarshal的入參必須為map的地址 B. 在函數調用中傳遞map,則子函數中對map元素的增加不會導致父函數中map的修改 C. 在函數調用中傳遞map,則子函數中對map元素的修改不會導致父函數中map的修改 D. 不能使用內置函數delete刪除map的元素 ~~~ 參考答案:A 28、關于GoStub,下面說法正確的是() ~~~ A. GoStub可以對全局變量打樁 B. GoStub可以對函數打樁 C. GoStub可以對類的成員方法打樁 D. GoStub可以打動態樁,比如對一個函數打樁后,多次調用該函數會有不同的行為 ~~~ 參考答案:ABD 填空題 1、下面的程序的運行結果是__________ ~~~ for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } ~~~ 參考答案: ~~~ 4 3 2 1 0 ~~~ 2、下面的程序的運行結果是__________ ~~~ func main() { x := 1 { x := 2 fmt.Print(x) } fmt.Println(x) } ~~~ 參考答案: ~~~ 21 ~~~ 3、下面的程序的運行結果是__________ ~~~ 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 ~~~ 4、下面的程序的運行結果是__________ ~~~ func main() { x := []string{"a", "b", "c"} for v := range x { fmt.Print(v) } } ~~~ 參考答案: ~~~ 012 ~~~ 5、下面的程序的運行結果是__________ ~~~ func main() { x := []string{"a", "b", "c"} for _, v := range x { fmt.Print(v) } } ~~~ 參考答案: ~~~ abc ~~~ 6、下面的程序的運行結果是__________ ~~~ 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 ~~~ 判斷題 1、內置函數delete可以刪除數組切片內的元素() 參考答案:F 2、下面關于文件操作的代碼可能觸發異常() ~~~ file, err := os.Open("test.go") defer file.Close() if err != nil { fmt.Println("open file failed:", err) return } ... ~~~ 參考答案:T 3、當程序運行時,如果遇到引用空指針、下標越界或顯式調用panic函數等情況,則先觸發panic函數的執行,然后調用延遲函數。調用者繼續傳遞panic,因此該過程一直在調用棧中重復發生:函數停止執行,調用延遲執行函數。如果一路在延遲函數中沒有recover函數的調用,則會到達該攜程的起點,該攜程結束,然后終止其他所有攜程,其他攜程的終止過程也是重復發生:函數停止執行,調用延遲執行函數() 參考答案:F 4、可以給任意類型添加相應的方法() 參考答案:F 5、結構體在序列化時非導出變量(以小寫字母開頭的變量名)不會被encode,因此在decode時這些非導出變量的值為其類型的零值() 參考答案:T 5、當函數deferDemo返回失敗時,并不能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 6、channel本身必然是同時支持讀寫的,所以不存在單向channel() 參考答案:F ~~~ 作者:_張曉龍_ 鏈接:https://www.jianshu.com/p/f690203ff168 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看