這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
全世界有多少 Gopher?
上周的周報中,我們介紹了 Go 語言的排名已經進入到前十。那麼世界上到底有多少 Gopher 呢?
作者列出了以下計算公式:
Gopher 數量 = 全世界的開發人員數量 * 使用 Go 語言的軟體占所有軟體的比例
Go1.9 有哪些值得關注的變化
還有不到一個月,Go 1.9版本也要正式發布了(計劃 8 月份發布),當前 Go 1.9 的最新版本是 go1.9 beta2,本篇的實驗環境也是基於該版本的,估計與最終 go 1.9 版本不會有太大差異了。在今年的 GopherChina 大會上,作者曾提到:Go 已經演化到1.9,接下來是 Go 1.10 還是 Go 2? 現在答案已經揭曉:Go 1.10。
言歸正傳,我們還是來看看 Go 1.9 究竟有哪些值得我們關注的變化。
Go 竊取演算法的調度器
Go 調度器的功能是分配多個 OS 線程,使其在一個或多個處理器上運行時能順利使用 goroutine。 在多線程運算調度過程中,工作分享和工作竊取往往同時發生。從 Go 1.1 開始,Golang 核心開發人員 Dmitry Vyukov 就已經上傳了 Go 工作竊取演算法的調度器。本文將進一步深度解釋 Go 工作竊取演算法調度器的原理,以及如何用 Go 語言實現調度器的功能。
Go 進階測試方式
本文作者 Mitchell Hashimoto ,是美國資料中心管理技術研發公司 HashiCorp 的聯合創始人之一。他開發了 Vagrant, Packer, Terraform, Consul, Vault 等一系列實用的開發工具。
從 Go 1.0 開始,Mitchell就開始使用 Go 語言編程,逐漸地,他開始著迷於自動化的實現。作為 O’Reilly 的作者之一,他在 GitHub 上成為了擁有無數粉絲的核心使用者。在 HashiCorp 公司的業務中,Go 語言無處不在,並在過去 5 年中成為了第一語言。
Mitchell Hashimoto 在本文中講解了 Go 進階測試方式
Go 1.9 sync.Map 揭秘
在 Go 1.6 之前, 內建的 map 類型是部分 goroutine 安全的,並發的讀沒有問題,並發的寫可能有問題。自 go 1.6 之後, 並發地讀寫 map 會報錯,這在一些知名的開源庫中都存在這個問題,所以 go 1.9 之前的解決方案是額外綁定一個鎖,封裝成一個新的struct或者單獨使用鎖都可以。
本文帶你深入到 sync.Map 的具體實現中,看看為了增加一個功能,代碼是如何變的複雜的,以及作者在實現 sync.Map 的一些思想。