SegmentFault 思否技術週刊 -- Go 語言通關攻略

Beverly 發表於 2022-05-18
Go

Go(又稱 Golang )是Google開發的一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言。

知識進階

《Go 1.18 泛型全面講解:一篇講清泛型的全部》

2022年3月15日,爭議非常大但同時也備受期待的泛型終於伴隨著Go1.18釋出了。
可是因為Go對泛型的支援時間跨度太大,有非常多的以“泛型”為關鍵字的文章都是在介紹Go1.18之前的舊泛型提案或者設計,而很多設計最終在Go1.18中被廢棄或發生了更改。並且很多介紹Go1.18泛型的文章(包括官方的)都過於簡單,並沒對Go的泛型做完整的介紹,也沒讓大家意識到這次Go引入泛型給語言增加了多少複雜度(當然也可能單純是我沒搜到更好的文章)
出於這些原因,我決定參考 The Go Programming Language Specification ,寫一篇比較完整系統介紹Go1.18 泛型的文章,這可能是目前介紹Go泛型比較全面的文章之一了。
本文力求能讓未接觸過泛型程式設計的人也能較好理解Go的泛型,所以行文可能略顯囉嗦,相信看完這篇文章你能獲得對Go泛型非常全面的瞭解。

《個人經驗分享如何閱讀Go語言原始碼》

Go原始碼包括哪些、檢視標準庫原始碼、檢視Go語言底層實現

《Go 讀者提問:Go 函式返回值命名有存在的意義嗎?》

實際上帶命名的返回引數,比較帶有 Go 的風格,就是顯式命名了返回。
但也會帶來可能存在的函式內返回的省略,以至於很多人新入門的朋友看不懂。又或是像是文章內所介紹的,帶命名的返回引數寫著寫著變成遞迴函式,一手抖也是會出現的。

《Go 設計哲學:少即是多,哪裡來的?》

之前在 Go 社群分享知識和經驗時,經常會聽見諸如:less is more、少即是多,大道至簡、大道不停地至簡等黑話。
甚至討論 Go issues 和提案時,都會有人用 “less is more” 來反駁或做為論點支撐,非常有意思。大家都會很好奇,出處是哪裡,是什麼意思?

《為什麼 Go 用起來會難受?這 6 個細節你知道嗎?》

在做新的應用選型時,我們會進行應用程式語言的選擇,這時會糾結 Java、PHP、Go...各種,會思考有沒有致命的問題,不能用?
可以明確的是,Go 沒有非常致命的問題,否則你我他都不會在這裡相遇,也不會大火。
難受的點倒是有不少,今天就和大家一起來看看。

上手實操

《golang 開發框架文件集》

Istio、Go-kit、Go-kratos、Go-micro、Go-zero、Goa、gizmo、Dubbo-go、Jupiter、Tars-go

《Go的高效開發套路》

當前在公司進行Go服務端研發工作時,發現缺少Go開發的最佳實踐,而導致以下現象:
1.用Go開發時會比較迷茫,不知如何下手,怎麼開展工作比較高效。
2.重複造輪子比較嚴重。
3.專案的程式碼質量參差不齊,導致交付的產品質量參差不齊。
4.產品執行黑盒,可觀測性差,能跑就行。
5.程式碼實現考驗研發人員水平,但頂尖的畢竟是少數,往往比較差,而且頂尖也說不準會犯錯。
6.一個人負責整個功能開發,一旦人員離職,程式碼維護就會難上艱難。
......

《用Go構建你專屬的JA3指紋》

本文將簡單回顧https的握手流程,並解釋什麼是JA3指紋以及如何用Go定製專屬的JA3指紋,各位讀者可以跟著作者的思路逐步構建自己專屬的JA3指紋。

《帶你十天輕鬆搞定 Go 微服務之大結局(分散式事務)》

我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
1.環境搭建
2.服務拆分
3.使用者服務
4.產品服務
5.訂單服務
6.支付服務
7.RPC 服務 Auth 驗證
8.服務監控
9.鏈路追蹤
10.分散式事務(本文)
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。

面試真題

《面試官:簡單聊聊 Go 逃逸分析?》

面試官:“寫過C/C++的同學都知道,呼叫著名的malloc和new函式可以在堆上分配一塊記憶體,這塊記憶體的使用和銷燬的責任都在程式設計師。一不小心,就會發生記憶體洩露。那你說下Golang 是怎麼處理這個問題的”
胖虎:“Golang 通過逃逸分析,對記憶體管理進行的優化和簡化,它可以決定一個變數是分配到堆還棧上。”

《面試官:來說一說Go語言的函式呼叫慣例》

本文與大家聊一聊Go語言的函式呼叫慣例,呼叫慣例是呼叫方和被呼叫方對於引數和返回值傳遞的約定,Go語言的呼叫慣例在1.17版本進行了優化,下面就讓我們看一下兩個版本的呼叫慣例是什麼樣的吧~

《Go語言切片面試真題7連問》

1.陣列和切片有什麼區別?
2.拷貝大切片一定比拷貝小切片代價大嗎?
3.切片的深淺拷貝
4.零切片、空切片、nil切片是什麼
5.切片的擴容策略
6.引數傳遞切片和切片指標有什麼區別?
7.range遍歷切片有什麼要注意的?

熱門問答

課程推薦

《7 天玩轉 GO 語言》 本門課程為圖文課程

Go 語言的入門到精通:
指的不應只是掌握基礎語法,熟悉模組原始碼
更重要的是可以獨立開發系統,並且可以應用go的思想解決工作中的問題

這門課不單是寫給0基礎人看的入門級教程,更是提供給已經有程式設計思想,特別是熟練其它後端語言的同學的完美通關教程

在這門課程裡,你會獲得:
1.資深其他程式語言程式設計師(例如Java、C++、PHP等)轉Go 開發的避坑指南;
2.系統化的掌握Go 語言程式設計思路,並能解決實際問題;
3.2個專案實戰,理解coding 的一些基本思路和 golang 社群的一些玩法。


PS:大家想看哪些方面的技術內容,可以在評論區留言喔 ~
如有問題可以新增小姐姐微信~
image.png