Go 開發者進階週刊(Jan week 1)
語言學習(Golang 程式設計知識與技巧)
依賴注入是軟體工程中經常使用到的一種技術,它提供了一種控制反轉的機制,把控制權利交給了呼叫方。呼叫方來決定使用哪些引數,哪些物件來進行具體的業務邏輯。
它有幾個好處:
1 它讓呼叫方更靈活。
2 大量減少定義型別的程式碼量
3 增加程式碼的可用性,因為呼叫方只需要關注它需要的引數,不需要顧及它不需要的引數了。
函式是 Go 語言中的一等公民,理解和掌握函式的呼叫過程是深入學習 Golang 時無法跳過的步驟,這裡會介紹 Go 語言中函式呼叫的過程和實現原理並與 C 語言中函式執行的過程進行對比,同時對引數傳遞的原理進行剖析,讓讀者能夠清楚地知道 Go 在函式的執行過程中究竟都做了哪些工作。
管道是Unix哲學的基石,它允許通過組合僅做一件事情的程式來處理更復雜的問題。
文中將實現一個可以在Unix管道中使用的簡單Golang程式,使用的所有程式碼都在github.com/napicella/go-linux-pipes上。
4.圖解Go裡面的sync.Map瞭解程式語言核心實現原始碼
本文為 Heptio 資深工程師、著名 Go 語言專家 David Cheney 關於 Go 語言實踐的英文分享。
6.Go 系列教程
Go是一種程式語言,旨在快速編譯,簡化程式設計和在生產中高效執行。本教程將指導您在Ubuntu 18.04上通過命令列使用Go安裝和配置程式設計工作區。
每個依賴管理解決方案都必須解決選擇依賴項版本的問題。當前存在的許多版本選擇演算法都試圖識別任何依賴項的“最新最大(latest greatest)”版本。如果您認為語義版本控制(sematic versioning)將被正確應用並且這種社會契約得到遵守,那麼這是有道理的。在這樣的情況下,依賴項的“最新最大”版本應該是最穩定和安全的版本,並且應與較早版本具有向後相容性。至少在相同的主版本(major verion)依賴樹中是如此。
Go決定採用其他方法,Russ Cox花費了大量時間和精力撰寫文章和演講探討Go團隊的版本選擇方法,即最小版本選擇或MVS(Minimal Version Selection)。從本質上講,Go團隊相信MVS為Go程式實現痴線持久的和可重複的構建提供了最佳的方案。建議大家閱讀這篇文章以瞭解Go團隊為什麼相信這一點。
在本文中,作者將盡最大努力解釋MVS語義,展示一個實際的Go語言示例,並實際使用MVS演算法。
本文會演示簡單的Go軟體包的開發過程,並介紹了go
命令列工具,這是我們獲取,構建和安裝Go軟體包和命令的標準方法。
go工具要求你以特定方式組織程式碼,文中會介紹Go安裝啟動和執行的最簡單方法。
9. Golang記憶體分配
Go語言內建執行時(就是runtime),不同於傳統的記憶體分配方式,go為自主管理,最開始是基於tcmalloc架構,後面逐步迭新。自主管理可實現更好的記憶體使用模式,如記憶體池、預分配等,從而避免了系統呼叫所帶來的效能問題。
工程實踐(Go的專案應用實踐)
整體介紹了下當介面耗時較長的時候的一般處理方案。
MySQL 和 MongoDB 兩種不同型別的資料庫使用了相似卻不同的資料結構,為什麼 MySQL 選擇使用 B+ 樹而 MongoDB 使用 B 樹呢?
如下Go語言虛擬碼,開啟兩個協程,分別對一個結構體變數中的兩個相鄰的資料成員進行n次原子自增操作,當開啟_ [56]byte
這個看似多餘的程式碼後,程式執行速度加快了一倍!你知道是為什麼嗎?
4.清晰架構(Clean Architecture)的Go微服務: 設計原則
作者最近寫了一個Go微服務應用程式,這個程式的設計來自三個靈感:
- 清晰架構"Clean Architecture"and SOLID (物件導向設計)設計 原則
- Spring的容器技術(Spring’s application context)
- Go的簡潔設計特別是 Go的物件導向的設計
在區塊鏈公鏈的開發圈子裡,我們找到了一些流行的程式語言,有C++、Golang、Python和最近新起的Rust等等。老一代的公鏈,比如Bitcoin,Litcoin一般使用C/C++較多(我們看看那個時間,當時Go還沒起來呢),新一代的公鏈比如以太坊,聯盟鏈翹楚超級賬本,開始較多使用Go語言,當然我們看到Rust的發展勢頭也很猛,近兩年的很多公鏈比如波卡,Grin都開始採用Rust語言開發了。
生態擴充(雲原生等 Go 生態體系)
微服務架構是將軟體系統分解為自主模組,自主模組可以獨立部署,通過輕量級的、與語言無關的方式進行通訊,共同實現業務目標。
眾所周知,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 資源的限制出發,利用實驗的方式驗證了這一問題,並且給出了一些個人看法。
4. 您需要了解的有關Kubernetes服務質量(QoS)
服務質量(QoS)類是Kubernetes的概念,它確定Pod的排程和驅逐優先順序。 Kubernetes排程程式使用QoS類來做出有關將Pod排程到節點上的決策。
開源專案(社群新湧現的開源成果)
Gos:GO MODULE解決方案
tamago:為 ARM Socs 打造的裸金屬框架
sqlstats:為 Prometheus 準備的 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工程師 詳情
相關文章
- Go 開發者進階週刊(Jan week 2)Go
- Go 開發者進階週刊Go
- Go 開發者進階週刊(Dec 3rd)Go
- Go 開發者進階週刊(Dec 2nd)Go
- 摩拜前端週刊第1期前端
- Scala 技術週刊 | 第 1 期
- SegmentFault 思否技術週刊 Vol.74 — 淺談 Android 進階指北Android
- SegmentFault 思否技術週刊 -- Node.js 進階之旅,看看那些還需要學?Node.js
- FCC成都社群·前端週刊 第 1 期前端
- 『碼蛋』Android 週刊第1期Android
- Go 學習、Go 進階、Go 實用工具類Go
- Coursera課程筆記----C程式設計進階----Week 5筆記C程式程式設計
- BestofApplicationSecurity(Friday,Jan.1)APP
- Go語言輕鬆進階Go
- Go 進階學習筆記Go筆記
- 【Go進階—基礎特性】介面Go
- 【Go進階—基礎特性】deferGo
- 【Go進階—基礎特性】反射Go反射
- SegmentFault 思否技術週刊 -- Go 語言通關攻略Go
- SegmentFault 思否技術週刊 -- 進擊的 ReactReact
- React進階篇1React
- Docker進階使用1Docker
- LeetCode Week 1LeetCode
- go 單元測試進階篇Go
- 【Go進階—基礎特性】錯誤Go
- 【Go進階—資料結構】mapGo資料結構
- 【Go進階—資料結構】ChannelGo資料結構
- 【Go進階—資料結構】sliceGo資料結構
- 科技愛好者週刊(第 159 期):遊戲開發者的年薪遊戲開發
- 8.week 獨立開發第八週週報
- 7.week 獨立開發第七週週報
- Rust 程式設計影片教程(進階)——004_1 生命週期介紹Rust程式設計
- Newstar_week1-2_wp
- SegmentFault 思否技術週刊 Vol.71 — 解讀 Go 語言Go
- 【Go進階—基礎特性】panic 和 recoverGo
- 【Go進階—基礎特性】定時器Go定時器
- 【Go進階—併發程式設計】MutexGo程式設計Mutex
- 【Go進階—資料結構】stringGo資料結構