Go 開發者進階週刊(Jan week 1)

dyq發表於2020-01-03

語言學習(Golang 程式設計知識與技巧)

1.Golang 實現依賴注入

依賴注入是軟體工程中經常使用到的一種技術,它提供了一種控制反轉的機制,把控制權利交給了呼叫方。呼叫方來決定使用哪些引數,哪些物件來進行具體的業務邏輯。

它有幾個好處:
1 它讓呼叫方更靈活。
2 大量減少定義型別的程式碼量
3 增加程式碼的可用性,因為呼叫方只需要關注它需要的引數,不需要顧及它不需要的引數了。

2.理解 Golang 中函式呼叫的原理

函式是 Go 語言中的一等公民,理解和掌握函式的呼叫過程是深入學習 Golang 時無法跳過的步驟,這裡會介紹 Go 語言中函式呼叫的過程和實現原理並與 C 語言中函式執行的過程進行對比,同時對引數傳遞的原理進行剖析,讓讀者能夠清楚地知道 Go 在函式的執行過程中究竟都做了哪些工作。

3.Go 中 Linux管道

管道是Unix哲學的基石,它允許通過組合僅做一件事情的程式來處理更復雜的問題。

文中將實現一個可以在Unix管道中使用的簡單Golang程式,使用的所有程式碼都在github.com/napicella/go-linux-pipes上。

4.圖解Go裡面的sync.Map瞭解程式語言核心實現原始碼

在大多數語言中原始map都不是一個執行緒安全的資料結構,那如果要在多個執行緒或者goroutine中對執行緒進行更改就需要加鎖,除了加1個大鎖,不同的語言還有不同的優化方式, 像在java和go這種語言其實都採用的是連結串列法來進行map的實現,本文也主要分析這種場景。

5.【譯】Go 語言實踐:編寫可維護的程式的建議

本文為 Heptio 資深工程師、著名 Go 語言專家 David Cheney 關於 Go 語言實踐的英文分享。

6.Go 系列教程

Go是一種程式語言,旨在快速編譯,簡化程式設計和在生產中高效執行。本教程將指導您在Ubuntu 18.04上通過命令列使用Go安裝和配置程式設計工作區。

7. Go modules:最小版本選擇

每個依賴管理解決方案都必須解決選擇依賴項版本的問題。當前存在的許多版本選擇演算法都試圖識別任何依賴項的“最新最大(latest greatest)”版本。如果您認為語義版本控制(sematic versioning)將被正確應用並且這種社會契約得到遵守,那麼這是有道理的。在這樣的情況下,依賴項的“最新最大”版本應該是最穩定和安全的版本,並且應與較早版本具有向後相容性。至少在相同的主版本(major verion)依賴樹中是如此。

Go決定採用其他方法,Russ Cox花費了大量時間和精力撰寫文章演講探討Go團隊的版本選擇方法,即最小版本選擇或MVS(Minimal Version Selection)。從本質上講,Go團隊相信MVS為Go程式實現痴線持久的和可重複的構建提供了最佳的方案。建議大家閱讀這篇文章以瞭解Go團隊為什麼相信這一點。

在本文中,作者將盡最大努力解釋MVS語義,展示一個實際的Go語言示例,並實際使用MVS演算法。

8.如何正確的開始用 Go 程式設計

本文會演示簡單的Go軟體包的開發過程,並介紹了go命令列工具,這是我們獲取,構建和安裝Go軟體包和命令的標準方法。

go工具要求你以特定方式組織程式碼,文中會介紹Go安裝啟動和執行的最簡單方法。

9. Golang記憶體分配

Go語言內建執行時(就是runtime),不同於傳統的記憶體分配方式,go為自主管理,最開始是基於tcmalloc架構,後面逐步迭新。自主管理可實現更好的記憶體使用模式,如記憶體池、預分配等,從而避免了系統呼叫所帶來的效能問題。

 

工程實踐(Go的專案應用實踐)

1.使用 Go 優化我們的介面

整體介紹了下當介面耗時較長的時候的一般處理方案。

2.為什麼 MongoDB 使用 B 樹

MySQL 和 MongoDB 兩種不同型別的資料庫使用了相似卻不同的資料結構,為什麼 MySQL 選擇使用 B+ 樹而 MongoDB 使用 B 樹呢?

3.利用 CPU cache 特性優化Go程式

如下Go語言虛擬碼,開啟兩個協程,分別對一個結構體變數中的兩個相鄰的資料成員進行n次原子自增操作,當開啟_ [56]byte這個看似多餘的程式碼後,程式執行速度加快了一倍!你知道是為什麼嗎?

4.清晰架構(Clean Architecture)的Go微服務: 設計原則

作者最近寫了一個Go微服務應用程式,這個程式的設計來自三個靈感:

5. XSS簡介以及如何保護你的客戶(Go版本)

6.Go依賴注入工具 wire 與 dig 對比

7.我們為什麼用GO語言來做區塊鏈? 

在區塊鏈公鏈的開發圈子裡,我們找到了一些流行的程式語言,有C++、Golang、Python和最近新起的Rust等等。老一代的公鏈,比如Bitcoin,Litcoin一般使用C/C++較多(我們看看那個時間,當時Go還沒起來呢),新一代的公鏈比如以太坊,聯盟鏈翹楚超級賬本,開始較多使用Go語言,當然我們看到Rust的發展勢頭也很猛,近兩年的很多公鏈比如波卡,Grin都開始採用Rust語言開發了。

8.Golang 錯誤處理最佳實踐

 

生態擴充(雲原生等 Go 生態體系)

1.微服務架構的 10個 最佳實踐

微服務架構是將軟體系統分解為自主模組,自主模組可以獨立部署,通過輕量級的、與語言無關的方式進行通訊,共同實現業務目標。

2.GOMAXPROCS 與容器的相處之道

眾所周知,GOMAXPROCS 是 Golang 提供的非常重要的一個環境變數設定。通過設定 GOMAXPROCS,使用者可以調整 Runtime Scheduler 中 Processor(簡稱P)的數量。由於每個系統執行緒,必須要繫結 P 才能真正地進行執行。所以 P 的數量會很大程度上影響 Golang Runtime 的並發表現。GOMAXPROCS 在目前版本(1.12)的預設值是 CPU 核數,而以 Docker 為代表的容器虛擬化技術,會通過 cgroup 等技術對 CPU 資源進行隔離。以 Kubernetes 為代表的基於容器虛擬化實現的資源管理系統,也支援這樣的特性。這類技術對 CPU 的隔離限制,是否能夠影響到 Golang 中的 GOMAXPROCS,進而影響到 Golang Runtime 的並發表現呢?這是一個值得探索的話題,本文從 Docker 和 Kubernetes 對 CPU 資源的限制出發,利用實驗的方式驗證了這一問題,並且給出了一些個人看法。

3. 使用多階段構建的精益Golang Docker映象

4. 您需要了解的有關Kubernetes服務質量(QoS)

服務質量(QoS)類是Kubernetes的概念,它確定Pod的排程和驅逐優先順序。 Kubernetes排程程式使用QoS類來做出有關將Pod排程到節點上的決策。 


開源專案(社群新湧現的開源成果)

Gos:GO MODULE解決方案

tamago為 ARM Socs 打造裸金屬框架

sqlstatsPrometheus 準備的 sql.DBStates 收集

go-term-markdown:Go Markdown終端渲染庫

sqlite:無需CGO的Go SQLite連線庫  


彩蛋(活動與招聘)

01.04 Gopher Meetup Plus 深圳站活動 報名

  •    Asta——Go在工業領域的應用實踐
  •    騰訊——Go效能優化之路
  •    廣發證券——Go與極限效能實踐
  •    OPPO——雲平臺儲存系統架構設計與容器化實踐
  •    平安科技——從面試題目到Golang彙編
  •    騰訊——如何向Go官方提交程式碼
  •    華為雲——KubeEdge:雲原生邊緣計算平臺的Golang實踐

北京】【商湯科技招聘】Golang開發實習生 詳情

【杭州】【螞蟻金服】螞蟻金服研發效能團隊招人啦!詳情

【上海】【趣頭條旗下米讀小說】資深後端研發/架構師 詳情

【武漢】【奇虎360】招聘資深golang工程師 詳情

 

相關文章