01
大家好,我叫謝偉,是一名使用 Go 語言的後端開發者。
本文章的主題是: 編寫適用於 Go 專案的 Makefile 指南。
1. 前提:
會使用 Makefile
會使用 Go 編寫專案
編寫專案的過程中,經常需要對檔案進行編譯和執行,檢視功能開發或者修複的 Bug 是否正確。你當然可以直接執行 go build 命令用來編譯,執行 go run
命令來執行。
在編寫 Go 專案其實還會經常執行些諸如 測試、格式檢查、庫下載安裝等命令。
當然你也可以編寫 shell 指令碼來執行這些命令,進一步進行了簡化。
其實有更好的選擇,即 Makefile。 在諸多的開源專案中經常能看到 Makefile 的身影。當你的專案中檔案發生變化,都可以使用 Makefile 執行命令來自動構建
原文連結:
https://juejin.im/post/5c98edb56fb9a070d75585e3
原文二維碼:
02
在 上一章節 中,資料結構小節裡講解了大量基礎欄位,可能你會疑惑需要 #&(!……#(!¥! 來幹嘛?接下來我們一起簡單瞭解一下基礎概念。再開始研討今天文章的重點內容。我相信這樣你能更好的讀懂這篇文章
原文地址:深入理解 Go map:賦值和擴容遷移
雜湊函式
雜湊函式,又稱雜湊演演算法、雜湊函式。主要作用是透過特定演演算法將資料根據一定規則組合重新生成得到一個雜湊值
而在雜湊表中,其生成的雜湊值常用於尋找其鍵對映到哪一個桶上。而一個好的雜湊函式,應當儘量少的出現雜湊衝突,以此保證操作雜湊表的時間複雜度(但是雜湊衝突在目前來講,是無法避免的。我們需要 “解決” 它)
原文連結:
https://segmentfault.com/a/1190000018632347#__NO_LINK_PROXY__
原文二維碼:
03
作者近期在寫一個專案時遇到了這樣的需求:呼叫一個庫API函式,函式內部又會拉起若干個後臺goroutine。這時後臺goroutine如果遇到錯誤想要及時通知庫的使用者將不會是一件容易的事情,因為這是一個非同步通知error的方法。
作者最終的解決方案概括為:使用者另啟一個goroutine監聽Err channel,庫後臺goroutine出現的錯誤將直接傳送至Err channel中。
作者以自己專案簡單舉例:
func DaemonListen(err chan Errsocket){
for {
v, ok := if ok {
fmt.Println(v) /*處理錯誤*/
} else {
fmt.Println("Listen closed.")/*後臺安全退出*/
return
}
}
}
func main(){
x := NewServer(/*......*/)
//後臺會啟動多個goroutine協同工作,該方法立即傳回
x.Listen()
//啟動守護goroutine監聽error channel
go DaemonListen(x.ErrDone())
}
需要註意的是:1.channel型別不一定只是error。如果你需要更多的資訊,完全可以是一個包含error的struct;2.告訴守護goroutine可以安全退出的方法是關閉該channel,此時需保證該channel不會再被使用。若此時有goroutine試圖向該channel傳送error則會引發panic。
原文連結:
https://www.jianshu.com/p/5e7ce22d9831
原文二維碼:
04
我是蔡超,現在是 Mobvista 技術副總裁,前亞馬遜(中國)首席軟體架構師,極客時間《Go 語言從入門到實戰》影片課程的作者。
在 2018 年的 QCon 北京全球軟體開發大會上,我做了題為《講給 Java / C++ 開發者的 Go 高效程式設計》的主題演講,會後跟大家交流,發現許多人對 Go 語言的學習有需求和熱情。但大家的普遍問題就是:不知道該如何高效的入門 Go 語言,尤其是有程式設計基礎的開發者,一不小心就會陷入思維的誤區。
因此,今天我就來梳理一下 Go 語言入門學習的過程中,你容易產生的五個思維誤區,幫你掌握在 Go 語言與其他程式語言的不同之處。
原文連結:
https://www.infoq.cn/article/qzrGhlzq_HikN10xC5jC
原文二維碼:
05
1.熱更新大致思路
熱更新標的:
- 1、正在處理中的連線/服務/請求不能立即中斷,需要繼續提供服務
- 2、socket對使用者來說要保持可用,可以接受新的請求
直接沿用上篇的思路,熱更新(單行程)流程,其基本流程如下:
- 1、用新的bin檔案去替換老的bin檔案
- 2、傳送訊號告知server行程(通常是USR2訊號),進行平滑升級
- 3、server行程收到訊號後,透過呼叫fork/exec啟動新的版本的行程
- 4、子行程呼叫介面獲取從父行程繼承的socket 檔案描述符重新監聽socket
- 5、老的行程不再接受請求,待正在處理中的請求處理完後,行程自動退出
- 6、子行程託管給init行程我們可以按照這個思路完成一個簡單的可以熱更新的http server。
原文連結:
https://zhuanlan.zhihu.com/p/59196185
原文二維碼:
職位推薦:
【上海】積夢智慧招聘Go工程師
【廣州】壞猴子科技招聘高階 Golang 開發工程師
【北京、武漢】雲沃客招聘golang 開發工程師
招聘詳情地址:https://gocn.vip/explore/category-8
Gopher China 2019 最新資訊:
志願者招募:
因 Gopher China 2019 大會報名人數超出預期,現還需招募大會現場服務執行志願者1名,本次招募只限北京地區。
地區:僅限北京地區 人數:1人
工作時段:
4月26日下午+4月27日上午+4月28日下午,需要1名,(不會錯過27號下午和28號上午的演講)。
如果你是北京地區在校學生,也是Go語言愛好者,可透過申請志願服務免費獲得 Gopher China 2019 大會參會資格。
識別下方二維碼即可報名志願者: