1.Docker項目
蓮湖網站建設公司成都創新互聯公司,蓮湖網站設計制作,有大型網站制作公司豐富經驗。已為蓮湖近1000家提供企業網站建設服務。企業網站搭建\成都外貿網站建設公司要多少錢,請找那個售后服務好的蓮湖做網站的公司定做!
網址為 。
介紹:Docker是一種操作系統層面的虛擬化技術,可以在操作系統和應用程序之間進行隔離,也可以稱之為容器。Docker可以在一臺物理服務器上快速運行一個或多個實例。例如,啟動一個Cent OS操作系統,并在其內部命令行執行指令后結束,整個過程就像自己在操作系統一樣高效。
2.golang項目
網址為 。
介紹:Go語言的早期源碼使用C語言和匯編語言寫成。從Go 1.5版本自舉后,完全使用Go語言自身進行編寫。Go語言的源碼對了解Go語言的底層調度有極大的參考意義,建議希望對Go語言有深入了解的讀者讀一讀。
3.Kubernetes項目
網址為 。
介紹:Google公司開發的構建于Docker之上的容器調度服務,用戶可以通過Kubernetes集群進行云端容器集群管理。
4.etcd項目
網址為 。
介紹:一款分布式、可靠的KV存儲系統,可以快速進行云配置。
5.beego項目
網址為 。
介紹:beego是一個類似Python的Tornado框架,采用了RESTFul的設計思路,使用Go語言編寫的一個極輕量級、高可伸縮性和高性能的Web應用框架。
6.martini項目
網址為 。
介紹:一款快速構建模塊化的Web應用的Web框架。
7.codis項目
網址為 Labs/codis。
介紹:國產的優秀分布式Redis解決方案。
8.delve項目
網址為 。
介紹:Go語言強大的調試器,被很多集成環境和編輯器整合。
go語言適用的領域有:
Go語言主要用作服務器端開發,其定位是用來開發“大型軟件”的,適合于很多程序員一起開發大型軟件,并且開發周期長,支持云計算的網絡服務。
Go語言作為服務器編程語言,很適合處理日志、數據打包、虛擬機處理、文件系統、分布式系統、數據庫代理等;網絡編程方面,Go語言廣泛應用于Web應用、API應用、下載應用等;除此之外,Go語言還可用于內存數據庫和云平臺領域,目前國外很多云平臺都是采用Go開發。
Go語言能夠讓程序員快速開發,并且在軟件不斷的增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統編譯型語言的高效性和腳本語言的易用性和富于表達性。
Go語言作為一門大型項目開發語言,在很多大公司相繼使用,甚至完全轉向Go開發,其中代表有Google、Facebook、騰訊、百度、阿里巴巴、京東、小米以及360、美團、滴滴以及新浪等,因此,Go語言的開發前景還是很不錯的!
為什么需要context
在go服務器中,對于每個請求的request都是在單獨的goroutine中進行的,處理一個request也可能設計多個goroutine之間的交互, 使用context可以使開發者方便的在這些goroutine里傳遞request相關的數據、取消goroutine的signal或截止日期
在并發程序中,由于超時、取消操作或者一些異常情況,往往需要進行搶占操作或者中斷后續操作。熟悉channel的朋友應該都見過使用done channel來處理此類問題。比如以下這個例子:
上述例子中定義了一個buffer為0的channel done, 子協程運行著定時任務。如果主協程需要在某個時刻發送消息通知子協程中斷任務退出,那么就可以讓子協程監聽這個done channel,一旦主協程關閉done channel,那么子協程就可以推出了,這樣就實現了主協程通知子協程的需求。這很好,但是這也是有限的。
如果我們可以在簡單的通知上附加傳遞額外的信息來控制取消:為什么取消,或者有一個它必須要完成的最終期限,更或者有多個取消選項,我們需要根據額外的信息來判斷選擇執行哪個取消選項。
考慮下面這種情況:假如主協程中有多個任務1, 2, …m,主協程對這些任務有超時控制;而其中任務1又有多個子任務1, 2, …n,任務1對這些子任務也有自己的超時控制,那么這些子任務既要感知主協程的取消信號,也需要感知任務1的取消信號。
如果還是使用done channel的用法,我們需要定義兩個done channel,子任務們需要同時監聽這兩個done channel。嗯,這樣其實好像也還行哈。但是如果層級更深,如果這些子任務還有子任務,那么使用done channel的方式將會變得非常繁瑣且混亂。
我們需要一種優雅的方案來實現這樣一種機制:
上層任務取消后,所有的下層任務都會被取消;中間某一層的任務取消后,只會將當前任務的下層任務取消,而不會影響上層的任務以及同級任務。
這個時候context就派上用場了。我們首先看看context的結構設計和實現原理。
context接口
先看Context接口結構,看起來非常簡單。
}
Context接口包含四個方法:
Deadline返回綁定當前context的任務被取消的截止時間;如果沒有設定期限,將返回ok == false。
Done 當綁定當前context的任務被取消時,將返回一個關閉的channel;如果當前context不會被取消,將返回nil。
Err 如果Done返回的channel沒有關閉,將返回nil;如果Done返回的channel已經關閉,將返回非空的值表示任務結束的原因。如果是context被取消,Err將返回Canceled;如果是context超時,Err將返回DeadlineExceeded。
Value 返回context存儲的鍵值對中當前key對應的值,如果沒有對應的key,則返回nil。
可以看到Done方法返回的channel正是用來傳遞結束信號以搶占并中斷當前任務;Deadline方法指示一段時間后當前goroutine是否會被取消;以及一個Err方法,來解釋goroutine被取消的原因;而Value則用于獲取特定于當前任務樹的額外信息。而context所包含的額外信息鍵值對是如何存儲的呢?其實可以想象一顆樹,樹的每個節點可能攜帶一組鍵值對,如果當前節點上無法找到key所對應的值,就會向上去父節點里找,直到根節點。
emptyCtx
emptyCtx是一個int類型的變量,但實現了context的接口。emptyCtx沒有超時時間,不能取消,也不能存儲任何額外信息,所以emptyCtx用來作為context樹的根節點。
Background和TODO只是用于不同場景下: Background通常被用于主函數、初始化以及測試中,作為一個頂層的context,也就是說一般我們創建的context都是基于Background;而TODO是在不確定使用什么context的時候才會使用。
用法 :
1、服務器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數據打包、虛擬機處理、文件系統等。
2、分布式系統、數據庫代理器、中間件:例如Etcd。
3、網絡編程:這一塊目前應用最廣,包括Web應用、API應用、下載應用,而且Go內置的net/http包基本上把我們平常用到的網絡功能都實現了。
4、開發云平臺:目前國外很多云平臺在采用Go開發,我們所熟知的七牛云、華為云等等都有使用Go進行開發并且開源的成型的產品。
5、區塊鏈:目前有一種說法,技術從業人員把Go語言稱作為區塊鏈行業的開發語言。如果大家學習區塊鏈技術的話,就會發現現在有很多很多的區塊鏈的系統和應用都是采用Go進行開發的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯盟鏈,兩者都有go語言的版本,且go-ehtereum還是以太坊官方推薦的版本。
自1.0版發布以來,go語言引起了眾多開發者的關注,并得到了廣泛的應用。go語言簡單、高效、并發的特點吸引了許多傳統的語言開發人員,其數量也在不斷增加。
使用 Go 語言開發的開源項目非常多。早期的 Go 語言開源項目只是通過 Go 語言與傳統項目進行C語言庫綁定實現,例如 Qt、Sqlite 等。
后期的很多項目都使用 Go 語言進行重新原生實現,這個過程相對于其他語言要簡單一些,這也促成了大量使用 Go 語言原生開發項目的出現。
一直直接操作的框架 使用vscode 打開就會自動裝包,這次想寫一個簡單應用,確不會怎么建項目,記錄如下。
go1.14 后,以及不再需要把項目寫在GOPATH下,所有不需要再配置。
配置GOPRXY goenv-w GOPROXY=(國內無法訪問)
使用go mod方法新建項目。
任意位置新建文件夾。
文件夾下執行go mod xxx ,生成一個go.mod文件。
新建一個main.go文件,就可以直接運行了。
我開始的時候,先建了main.go文件,再執行的go.mod。后面沒法運行。
參考:李文周的博客。
網站欄目:go語言做TODO項目 go語言 項目
本文鏈接:http://vcdvsql.cn/article10/hpgcgo.html
成都網站建設公司_創新互聯,為您提供網站建設、商城網站、網站設計公司、企業建站、網站收錄、服務器托管
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯