-
字節(jié)開源以Go為核心的項目,為何大廠都如此偏愛Go?
9月8日,字節(jié)跳動正式宣布開源CloudWeGo,這是一套以Go 語言為核心中間件集合。字節(jié)相關(guān)技術(shù)負責人表示希望CloudWeGo能豐富云原生社區(qū)的Golang工具體系。 可以看出,字節(jié)內(nèi)部已有諸多用Go語言開發(fā)的成熟項目,基本上也已經(jīng)全員轉(zhuǎn)Go了。其實不只是字節(jié),阿里、騰訊、百度、B站等也都開始嘗試用Go來開發(fā)項目了,如果你想進大廠,那么Go語言毫無疑問是最佳通行證。 為什么現(xiàn)在BAT大廠紛紛轉(zhuǎn)Go? Go有十分明顯的優(yōu)勢 許多大廠內(nèi)部需要構(gòu)建大型項目,而Go的高并發(fā)、高性能、高效率等優(yōu)勢,…
-
Go 項目中常見的 10 種錯誤
本文總結(jié)了10種 go 語言編成中可能導致性能下降的壞實踐。有代碼潔癖的同學來自我檢查吧! 這篇文章主要講述了我在 Go 項目中見到過的常見錯誤清單,順序無關(guān)。 未知的Enum值 來看個簡單的例子 在上面的代碼中,使用iota創(chuàng)建了一個enum類型,分別代指下面的狀態(tài)信息: 現(xiàn)在,我們假設(shè)Status?是一個 JSON 請求中被Marshalled / Unmarshalled的一個屬性,我們可以設(shè)計出下面的數(shù)據(jù)結(jié)構(gòu): 然后,假設(shè)收到的Request 的接口返回值為: 到目前為止,沒有什么特殊的…
-
Golang 如何表示枚舉類型
go 語言枚舉類型是這么用的?在什么場景下會用到枚舉?本文對 go 語言枚舉做了詳細講解。 枚舉,是一種重要的數(shù)據(jù)類型,由一組鍵值對組成,通常用來在編程語言中充當常量的標識符。在主流行編程語言如 c、 java 等,都有原生支持。在 go 中,大家卻找不到 enum 或者其它直接用來聲明枚舉類型的關(guān)鍵字。從熟悉其它編程語言的開發(fā)者轉(zhuǎn)用 go 編程,剛開始會比較難接受這種情況。其實,如果你看到如何在 go 中表示枚舉類型時,可能會感受到 go 語言設(shè)計者對簡潔性、問題考慮的深度,是一般資淺工程師無…
-
使用Golang開發(fā)OpenStack服務(wù)的CLI
由于我們需要編寫自己服務(wù)的客戶端,之前參考過magnum的python客戶端,編寫過一個,整體感受就是: 一件簡單的事兒,被他封裝的很復雜,而且還有一個關(guān)鍵痛點,部署問題:?1.依賴python環(huán)境 2. 蹩腳的二進制打包方式。因此,作為一個產(chǎn)品的CLI,以二進制方式交付會帶來諸多方便,比如cloud foundry也用golang重寫了他的客戶端部分。 Cobra簡介 在博客的開篇寫過一篇cobra的博客:?如何使用golang編寫漂亮的命令行工具, 很多流行的CLI都基于這個庫開發(fā),比如ku…
-
kubernetes基礎(chǔ)概念解析
本篇文章介紹kubernetes的一些基礎(chǔ)概念,也整理出了pdf版本,需要的下拉至文末領(lǐng)取。 目錄: ?1?、pod 概念 自主式POD:不是被控制器管理的pod。一旦死亡就不會再重生 控制器管理的POD:就是被控制器所管理的POD。 1、自主式POD的基礎(chǔ)概念 容器會共用pause的網(wǎng)絡(luò)棧,也就是說這兩個容器就沒有他的獨立地址了他們都是共同使用pause的地址、共用他的存儲卷 Pause 網(wǎng)絡(luò)棧共享:首先我們要定義一個 POD,就會先啟動第一個容器,只要運行一個POD這個容器就會被啟動、這個容…
-
找到惡意軟件包:Go 語言生態(tài)系統(tǒng)中的供應(yīng)鏈攻擊是怎樣的?
近期發(fā)生的嚴重的 SolarWinds 攻擊事件和新型 “依賴混淆“攻擊,讓供應(yīng)鏈攻擊成為討論焦點:攻陷供應(yīng)鏈中不太安全的元素,導致更安全的目標遭攻陷。 供應(yīng)鏈攻擊的流行目標一直都是流行編程語言的很多包管理系統(tǒng),如 NPM (JavaScript)、Rubygems (Ruby) 以及 PyPI (Python)。這些系統(tǒng)常年來遭受惡意攻擊,攻擊者上傳惡意包并等待受害者安裝。 目前為止,尚未看到關(guān)于 Go 生態(tài)系統(tǒng)的供應(yīng)鏈攻擊情況。鑒于 Go 語言是我的新寵,我決定自己做一些調(diào)查。 好在依賴混淆…
-
Go 中如何準確地判斷和識別各種網(wǎng)絡(luò)錯誤
Go語言集成了簡單易用的網(wǎng)路庫,今天的推送是一線架構(gòu)師分享的Go網(wǎng)絡(luò)庫使用入門指南。 Go 自帶的網(wǎng)絡(luò)標準庫可能讓很多第一次使用它的人感慨,這個庫讓網(wǎng)絡(luò)編程的門檻低到了令人發(fā)指的地步。然而,封裝層次與開發(fā)人員的可控性往往是矛盾的。Go 的網(wǎng)絡(luò)庫封裝程度算是一個不錯的折衷,絕大部分時候,我們只需要調(diào)用 Dial, Read, Write Close 幾個基本操作就可以了。 但是,網(wǎng)絡(luò)是復雜的。我們有時候需要細致的處理網(wǎng)絡(luò)中的各種錯誤,根據(jù)不同的錯誤進行不同的處理。比如我們遇到一個網(wǎng)絡(luò)錯誤時,需要區(qū)…
-
使用 Go 實現(xiàn) TLS socket server
安全傳輸層協(xié)議 TLS,以前稱為 SSL(Secure Sockets Layer) ,由于HTTPS的推出受到了很多人的歡迎。但是正如TLS的名稱 Transport Layer Security 所示的那樣,它實際上是獨立于 HTTP,一個更深入的安全協(xié)議,我們可以將 TLS 視為 TCP 的安全版本,其提供了對 socket 通信進行加密和簽名的功能。在我們的日常開發(fā)中,會將 gRPC 協(xié)議運行在TLS之上以確保安全。 今天我們來了解一下如何創(chuàng)建一個通過 TLS 加密的 socket 服務(wù)…
-
50 萬行Go代碼,美國一組織從Python 2遷移到 Go
美國教育非營利組織可汗學院(Khan Academy)方面透露,其已經(jīng)用谷歌的 Go 編程語言完成了 50 萬行代碼,以取代此前用 Python 2 編寫的后臺服務(wù)器。根據(jù)介紹,可汗學院在其 Goliath 項目下實現(xiàn)了從 Python 2 到 Go 的大轉(zhuǎn)變。Goliath 最初是使用 Python 2 實現(xiàn)的;從 2019 年開始,可汗學院逐步將其遷移到了 Go。 當我們開始 Goliath 項目的時候,團隊中沒有人知道 Go,只是通過實驗驗證了 Go 是相較而言更好的選擇。今天,我們所有的…
-
如何用Golang協(xié)程實現(xiàn)流量統(tǒng)計系統(tǒng)?
相信專業(yè)的程序開發(fā)人員都對并發(fā)編程十分熟悉。實現(xiàn)并發(fā)編程有進程、線程等方式,但是多進程和多線程并不是很完美。都是有內(nèi)核進行調(diào)度,有 CPU 時間片的概念,進行搶占式調(diào)度,對于編程來說,難度比較大。 而 Golang 作為一門現(xiàn)代化的編程語言,它不需要你直面這些復雜的問題。本質(zhì)上, goroutine 就是協(xié)程。?不同的是,Golang 在 runtime、系統(tǒng)調(diào)用等多方面對 goroutine 調(diào)度進行了封裝和處理,當遇到長時間執(zhí)行或者進行系統(tǒng)調(diào)用時,會主動把當前 goroutine 的CPU …