Go命令的作用

命令

go env: #用於查看go的環境變量

go run: #用於編譯並運行go源碼文件

go build: #用於編譯源碼文件、代碼包、依賴包

go get: #用於動態獲取遠程代碼包

go install: #用於編譯go文件,並將編譯結構安裝到bin、pkg目錄

go clean: #用於清理工作目錄,刪除編譯和安裝遺留的目標文件

go version: #用於查看go的版本信息

main函數

main函數中可以使用flag包來獲取和解析命令行參數

go語言的同步鎖

(1) 當一個goroutine獲得了Mutex後,其他goroutine就只能乖乖的等待,除非該goroutine釋放這個Mutex

(2) RWMutex在讀鎖佔用的情況下,會阻止寫,但不阻止讀

(3) RWMutex在寫鎖佔用情況下,會阻止任何其他goroutine(無論讀和寫)進來,整個鎖相當於由該goroutine獨佔

go語言的channel特性

A. 給一個 nil channel 發送數據,造成永遠阻塞

B. 從一個 nil channel 接收數據,造成永遠阻塞

C. 給一個已經關閉的 channel 發送數據,引起 panic

D. 從一個已經關閉的 channel 接收數據,如果緩衝區中爲空,則返回一個零值

E. 無緩衝的channel是同步的,而有緩衝的channel是非同步的

go語言觸發異常的場景

A. 空指針解析

B. 下標越界

C. 除數爲0

D. 調用panic函數

go語言的beego框架

A. beego是一個golang實現的輕量級HTTP框架

B. beego可以通過註釋路由、正則路由等多種方式完成url路由注入

C. 可以使用bee new工具生成空工程,然後使用bee run命令自動熱編譯

go語言的goconvey框架

A. goconvey是一個支持golang的單元測試框架

B. goconvey能夠自動監控文件修改並啓動測試,並可以將測試結果實時輸出到web界面

C. goconvey提供了豐富的斷言簡化測試用例的編寫

go語言中,GoStub的作用

A. GoStub可以對全局變量打樁

B. GoStub可以對函數打樁

C. GoStub不可以對類的成員方法打樁

D. GoStub可以打動態樁,比如對一個函數打樁後,多次調用該函數會有不同的行爲

go語言的select機制

A. select機制用來處理異步IO問題

B. select機制最大的一條限制就是每個case語句裏必須是一個IO操作

C. golang在語言級別支持select關鍵字

select隨機性

select可以在多個chan間等待執行。有三點原則:

select 中只要有一個case能return,則立刻執行。 *

當如果同一時間有多個case均能return則僞隨機方式抽取任意一個執行。

如果沒有一個case能return則可以執行”default”塊。

進程、線程、協程之間的區別

進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元;

同一個進程中可以包括多個線程;

進程結束後它擁有的所有線程都將銷燬,而線程的結束不會影響同個進程中的其他線程的結束;

線程共享整個進程的資源(寄存器、堆棧、上下文),一個進程至少包括一個線程;

進程的創建調用fork或者vfork,而線程的創建調用pthread_create;

線程中執行時一般都要進行同步和互斥,因爲他們共享同一進程的所有資源;

進程是資源分配的單位

線程是操作系統調度的單位

進程切換需要的資源很最大,效率很低 線程切換需要的資源一般,效率一般 協程切換任務資源很小,效率高 多進程、多線程根據cpu核數不一樣可能是並行的 也可能是併發的。協程的本質就是使用當前進程在不同的函數代碼中切換執行,可以理解爲並行。 協程是一個用戶層面的概念,不同協程的模型實現可能是單線程,也可能是多線程。

進程擁有自己獨立的堆和棧,既不共享堆,亦不共享棧,進程由操作系統調度。(全局變量保存在堆中,局部變量及函數保存在棧中)

線程擁有自己獨立的棧和共享的堆,共享堆,不共享棧,線程亦由操作系統調度(標準線程是這樣的)。

協程和線程一樣共享堆,不共享棧,協程由程序員在協程的代碼裏顯示調度。

一個應用程序一般對應一個進程,一個進程一般有一個主線程,還有若干個輔助線程,線程之間是平行運行的,在線程裏面可以開啓協程,讓程序在特定的時間內運行。

協程和線程的區別是:協程避免了無意義的調度,由此可以提高性能,但也因此,程序員必須自己承擔調度的責任,同時,協程也失去了標準線程使用多CPU的能力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章