golang在1.6.2的時候還沒有自己的context,在1.7的版本中就把golang.org/x/net/context包被加入到了官方的庫中。中文譯作“上下文”,它主要包含了goroutine 的運行狀態、環境等信息。
10年積累的做網站、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有連平免費網站建設讓你可以放心的選擇與我們合作。
context 主要用來在 goroutine 之間傳遞上下文信息,包括:同步信號、超時時間、截止時間、請求相關值等。
該接口定義了四個需要實現的方法:
如果有個網絡請求Request,然后這個請求又可以開啟多個goroutine做一些事情,當這個網絡請求出現異常和超時時,這個請求結束了,這時候就可以通過context來跟蹤這些goroutine,并且通過Context來取消他們,然后系統才可回收所占用的資源。
為了更方便的創建Context,包里頭定義了Background來作為所有Context的根,它是一個emptyCtx的實例。
Background返回一個非空的Context。它永遠不會被取消。它通常用來初始化和測試使用,作為一個頂層的context,也就是說一般我們創建的context都是基于Background。
TODO返回一個非空的Context。當不清楚要使用哪個上下文的時候可以使用TODO。
他們兩個本質上都是emptyCtx結構體類型,是一個不可取消,沒有設置截止時間,沒有攜帶任何值的Context。
有了如上的根Context,那么是如何衍生更多的子Context的呢?這就要靠context包為我們提供的With系列的函數了。
通過這些函數,就創建了一顆Context樹,樹的每個節點都可以有任意多個子節點,節點層級可以有任意多個。
WithCancel函數,最常用的派生 context 方法。該方法接受一個父 context。父 context 可以是一個 background context 或其他 context。
WithDeadline函數,該方法會創建一個帶有 deadline 的 context。當 deadline 到期后,該 context 以及該 context 的可能子 context 會受到 cancel 通知。另外,如果 deadline 前調用 cancelFunc 則會提前發送取消通知。
WithTimeout和WithDeadline基本上一樣,這個表示是超時自動取消,是多少時間后自動取消Context的意思。
WithValue函數和取消Context無關,它是為了生成一個綁定了一個鍵值對數據的Context,這個綁定的數據可以通過Context.Value方法訪問到,一般我們想要通過上下文來傳遞數據時,可以通過這個方法,如我們需要tarce追蹤系統調用棧的時候。
使用Context的程序應遵循以下規則,以使各個包之間的接口保持一致:
1.不要將 Context 塞到結構體里。直接將 Context 類型作為函數的第一參數,而且一般都命名為 ctx。
2.不要向函數傳入一個 nil 的 context,如果你實在不知道傳什么,標準庫給你準備好了一個 context:todo。
3.不要把本應該作為函數參數的類型塞到 context 中,context 存儲的應該是一些共同的數據。例如:登陸的 session、cookie 等。
4.同一個 context 可能會被傳遞到多個 goroutine,別擔心,context 是并發安全的。
1. os.Getwd()函數
原型:func Getwd()(pwd string, err error)
作用:獲取當前文件路徑
返回:當前文件路徑的字符串和一個err信息
示例:
輸出:
當前路徑: D:ProjectsGomGoLab01
2. os.Getenv()函數
原型:func Getenv(key string) string
作用:獲取系統環境變量的值
參數:key - 系統環境變量名
返回:系統環境變量的值
示例:
輸出:
環境變量GOPATH的值是: D:/Projects/Go
3. os.Chdir()函數
原型:func Chdir(dir string) error
作用:將當前文件路徑改變為目標路徑(非真實改變)
參數:dir - 目標路徑(即改變之后的路徑)
返回:修改成功,返回 nil;修改失敗(如:目標路徑不存在的情況),返回錯誤信息。
示例一:
輸出:
起始路徑: D:ProjectsGomGoLab01
修改后的路徑: D:ProjectsGoDemo02
示例二:
輸出:
起始路徑: D:ProjectsGomGoLab01
error: chdir D:ProjectsGoDemo03: The system cannot find the file specified.
注:文件路徑,Window 系統下默認是“”,寫在代碼中時要用“”或“/”代替。
《學習Go語言》百度網盤pdf最新全集下載:
鏈接:
?pwd=je9c 提取碼: je9c
簡介:Google工程師親授,從學習語言語法特性到函數式編程、并發編程等等。理論與實戰結合,幫助快速掌握Go語言。通過研讀標準庫等經典代碼設計模式,啟發讀者深刻理解Go語言的核心思維,進入Go語言開發的更高階段。 ?