歡迎光臨
每天分享高質量文章

一周 Go World 新鮮事-2019W12

01

適用於 Go 專案的 Makefile 指南

大家好,我叫謝偉,是一名使用 Go 語言的後端開發者。

本文章的主題是: 編寫適用於 Go 專案的 Makefile 指南。

1. 前提:

會使用 Makefile 

會使用 Go 編寫專案 

編寫專案的過程中,經常需要對檔案進行編譯和執行,查看功能開發或者修複的 Bug 是否正確。你當然可以直接執行 go build 命令用來編譯,執行 go run

命令來執行。

在編寫 Go 專案其實還會經常執行些諸如 測試、格式檢查、庫下載安裝等命令。

當然你也可以編寫 shell 腳本來執行這些命令,進一步進行了簡化。

其實有更好的選擇,即 Makefile。 在諸多的開源專案中經常能看到 Makefile 的身影。當你的專案中檔案發生變化,都可以使用 Makefile 執行命令來自動構建

 

原文鏈接:

https://juejin.im/post/5c98edb56fb9a070d75585e3

原文二維碼:

02

深入理解 Go map:賦值和擴容遷移

 

在 上一章節 中,資料結構小節里講解了大量基礎欄位,可能你會疑惑需要 #&(!……#(!¥! 來幹嘛?接下來我們一起簡單瞭解一下基礎概念。再開始研討今天文章的重點內容。我相信這樣你能更好的讀懂這篇文章

原文地址:深入理解 Go map:賦值和擴容遷移

哈希函式

哈希函式,又稱散列演算法、散列函式。主要作用是通過特定演算法將資料根據一定規則組合重新生成得到一個散列值

而在哈希表中,其生成的散列值常用於尋找其鍵映射到哪一個桶上。而一個好的哈希函式,應當儘量少的出現哈希衝突,以此保證操作哈希表的時間複雜度(但是哈希衝突在目前來講,是無法避免的。我們需要 “解決” 它)

 

原文鏈接:

https://segmentfault.com/a/1190000018632347#__NO_LINK_PROXY__

原文二維碼:

03

Golang 多goroutine異步通知error的一種方法

作者近期在寫一個專案時遇到了這樣的需求:呼叫一個庫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

蔡超:入門 Go 語言必須跨越的五個思維誤區

我是蔡超,現在是 Mobvista 技術副總裁,前亞馬遜(中國)首席軟體架構師,極客時間《Go 語言從入門到實戰》視頻課程的作者。

在 2018 年的 QCon 北京全球軟體開發大會上,我做了題為《講給 Java / C++ 開發者的 Go 高效編程》的主題演講,會後跟大家交流,發現許多人對 Go 語言的學習有需求和熱情。但大家的普遍問題就是:不知道該如何高效的入門 Go 語言,尤其是有編程基礎的開發者,一不小心就會陷入思維的誤區。

因此,今天我就來梳理一下 Go 語言入門學習的過程中,你容易產生的五個思維誤區,幫你掌握在 Go 語言與其他編程語言的不同之處。

原文鏈接:

https://www.infoq.cn/article/qzrGhlzq_HikN10xC5jC

原文二維碼:

05

從nginx熱更新聊一聊Golang中的熱更新(下)

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 大會參會資格。

識別下方二維碼即可報名志願者:

赞(0)

分享創造快樂