Go(又稱 Golang )是Google開發的一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言。
知識進階
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 社群分享知識和經驗時,經常會聽見諸如:less is more、少即是多,大道至簡、大道不停地至簡等黑話。
甚至討論 Go issues 和提案時,都會有人用 “less is more” 來反駁或做為論點支撐,非常有意思。大家都會很好奇,出處是哪裡,是什麼意思?
在做新的應用選型時,我們會進行應用程式語言的選擇,這時會糾結 Java、PHP、Go...各種,會思考有沒有致命的問題,不能用?
可以明確的是,Go 沒有非常致命的問題,否則你我他都不會在這裡相遇,也不會大火。
難受的點倒是有不少,今天就和大家一起來看看。
上手實操
Istio、Go-kit、Go-kratos、Go-micro、Go-zero、Goa、gizmo、Dubbo-go、Jupiter、Tars-go
當前在公司進行Go服務端研發工作時,發現缺少Go開發的最佳實踐,而導致以下現象:
1.用Go開發時會比較迷茫,不知如何下手,怎麼開展工作比較高效。
2.重複造輪子比較嚴重。
3.專案的程式碼質量參差不齊,導致交付的產品質量參差不齊。
4.產品執行黑盒,可觀測性差,能跑就行。
5.程式碼實現考驗研發人員水平,但頂尖的畢竟是少數,往往比較差,而且頂尖也說不準會犯錯。
6.一個人負責整個功能開發,一旦人員離職,程式碼維護就會難上艱難。
......
本文將簡單回顧https的握手流程,並解釋什麼是JA3指紋以及如何用Go定製專屬的JA3指紋,各位讀者可以跟著作者的思路逐步構建自己專屬的JA3指紋。
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
1.環境搭建
2.服務拆分
3.使用者服務
4.產品服務
5.訂單服務
6.支付服務
7.RPC 服務 Auth 驗證
8.服務監控
9.鏈路追蹤
10.分散式事務(本文)
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。
面試真題
面試官:“寫過C/C++的同學都知道,呼叫著名的malloc和new函式可以在堆上分配一塊記憶體,這塊記憶體的使用和銷燬的責任都在程式設計師。一不小心,就會發生記憶體洩露。那你說下Golang 是怎麼處理這個問題的”
胖虎:“Golang 通過逃逸分析,對記憶體管理進行的優化和簡化,它可以決定一個變數是分配到堆還棧上。”
本文與大家聊一聊Go語言的函式呼叫慣例,呼叫慣例是呼叫方和被呼叫方對於引數和返回值傳遞的約定,Go語言的呼叫慣例在1.17版本進行了優化,下面就讓我們看一下兩個版本的呼叫慣例是什麼樣的吧~
1.陣列和切片有什麼區別?
2.拷貝大切片一定比拷貝小切片代價大嗎?
3.切片的深淺拷貝
4.零切片、空切片、nil切片是什麼
5.切片的擴容策略
6.引數傳遞切片和切片指標有什麼區別?
7.range遍歷切片有什麼要注意的?
熱門問答
- Golang通道不理解之處
- Golang 引數為介面型別怎麼讀取屬性
- 這段go程式碼是什麼意思?
- Golang的map不能修改元素?
- Golang列印一個結構體結果是一個整型?
- Golang的interface為什麼不能接收int?
- golang 的第三方包管理機制和 Python 有什麼不同?
- 從 Golang 的 context 中讀寫資料為什麼是併發安全的?
課程推薦
《7 天玩轉 GO 語言》 本門課程為圖文課程
Go 語言的入門到精通:
指的不應只是掌握基礎語法,熟悉模組原始碼
更重要的是可以獨立開發系統,並且可以應用go的思想解決工作中的問題
這門課不單是寫給0基礎人看的入門級教程,更是提供給已經有程式設計思想,特別是熟練其它後端語言的同學的完美通關教程
在這門課程裡,你會獲得:
1.資深其他程式語言程式設計師(例如Java、C++、PHP等)轉Go 開發的避坑指南;
2.系統化的掌握Go 語言程式設計思路,並能解決實際問題;
3.2個專案實戰,理解coding 的一些基本思路和 golang 社群的一些玩法。
PS:大家想看哪些方面的技術內容,可以在評論區留言喔 ~
如有問題可以新增小姐姐微信~