SegmentFault 思否技術週刊 Vol.71 — 解讀 Go 語言

Beverly發表於2022-11-29

剛剛結束的關於「Go」語言的技術徵文活動,參與活動的創作者們,撰寫了很多優質技術內容,本期週刊做了彙總,歡迎大家一起閱讀~

本篇文章較長,建議收藏後慢慢閱讀~

文章推薦

【Go 微服務】開發 gRPC 總共分三步 // 王中陽 Go

透過這篇文章我們已經掌握了 gRPC 相關的知識點,可以獨立用 Go 實現客戶端和服務端的編寫,並且透過服務註冊對外提供服務,實現可客戶端和服務端的 gRPC 通訊。

【Go 微服務】一文帶你玩轉 ProtoBuf // 王中陽 Go

在網路通訊和通用資料交換等應用場景中經常使用的技術是 JSON 或 XML,在微服務架構中通常使用另外一個資料交換的協議的工具 ProtoBuf。
ProtoBuf 也是我們做微服務開發,進行 Go 進階實戰中,必知必會的知道點。

PHP 轉 GO 必看:為什麼我覺得 GoFrame 的 garray 比 PHP 的 array 還好用? // 王中陽 Go

在學習 Go 基礎知識的時候瞭解到 Go 的陣列和 PHP 的陣列並不一樣;從一定程度上講,Go的 slice 切片型別和 PHP 的陣列 array 比較像(不固定長度、引用型別、動態擴容等),但是在開發使用中遠遠不像 PHP 的 array 靈活。

透過閱讀原始碼解決專案難題:GToken 替換 JWT 實現 SSO 單點登入 // 王中陽 Go

今天和大家分享一下使用 GoFrame 的 gtoken 替換 jwt 實現 sso 登入的經驗。期間我也踩了一些坑,最終是透過閱讀原始碼解決了專案中遇到的問題。

三分鐘學會 go 語言的變數定義 // 夕水

特別說明: 本文只適合新手學習,這篇文章帶我們入門 go 語言的定義變數的方式,其實和 javascript 很相似,所以特意總結在此。
在 go 語言中,也有變數和常量兩種,首先我們來看變數的定義,定義變數我們分為定義單個變數和多個變數。

前端如何入門 Go 語言 // robin

類比法是一種學習方法,它是透過將新知識與已知知識進行比較,從而加深對新知識的理解。在學習 Go 語言的過程中,我發現,透過類比已有的前端知識,可以更好地理解 Go 語言的特性。

Go 微服務實戰之如何使用 go-micro 寫微服務應用 // 宇宙之一粟

本文介紹了微服務及其相關概念,重點比較了單體架構和微服務架構的區別,最後介紹了 Go 優秀的微服務框架之一的 Go-micro,並展示該框架的安裝和使用。

Go 微服務實戰之如何實現加解密操作的微服務開發 // 宇宙之一粟

本文透過實現加解密操作展示了一個微服務應用的開發過程。透過編寫服務端,成功執行了一個微服務例項,該服務能夠透過加密請求得到一個加密後的密文,透過解密請求將訊息進行解密,並返回明文結果。然後透過編寫客戶端向服務端進行 RPC 呼叫,成功將 Hello world 字串進行加密並列印出密文和明文的結果。

回聲嘹亮 之 Go 的 Echo 框架 —— 上手初體驗 // 宇宙之一粟

Go 語言的 Web 開發框架其實也有很多: Gin 、 Beego 、 Revel 。
Echo 作為其中的一款。截止到 2022 年,目前已經在 Github 上收穫了 21.7k 的 Star 和 1.9k 的 Fork,可以說是經得起時間檢驗,得到了大家的認可,正可謂對應上標題中的回聲嘹亮。

如何在 Go 程式碼中執行 C 語言程式碼 // 宇宙之一粟

我們瞭解到,Go 語言脫胎於 C 語言,這就意味著在某些更底層的細節中,我們可以使用 C 語言實現,然後透過 Go 來呼叫相關的 C 程式碼。其實這一特點,在 Java 的 JVM、Python 的直譯器也是透過底層是直接呼叫 C 實現的。
而本篇文章就來學習一下,如何在 Go 語言中執行 C 程式。

Go 語言如何連線並操作 MySQL 資料庫 // 宇宙之一粟

Go 有 sql 包,它提供了一個圍繞 SQL(或類似 SQL)資料庫的通用介面。 sql 包必須與資料庫驅動程式一起使用。該軟體包提供自動連線池。每次查詢資料庫時,我們都在使用應用程式啟動時設定的連線池中的連線,連線被重用。

Go 十年了,終於想起要統一 log 庫了! // 煎魚

思考一個問題:平時你在寫 Go 工程時,是否很少直接使用官方標準庫 log?
在正式專案中,大多是優先使用幾個爆款第三方庫,例如:Logrus、Zap、zerolog。而標準庫 log,在臨時除錯,螢幕輸出的場景居多,佔比較少。

在 Golang 中依賴注入是 解藥 還是 毒藥? // LinkinStar

回過頭來看我一開始說的觀點其實就不矛盾了,就拿我自己舉例來說,如果是一些小專案,並且很多時候 go 並不是做 web 開發,更多的是做工具那麼 DI 有時候並不一定需要。
但是對於一些大專案來說,我覺得為了以後的考慮,還是別挖坑了,無論是從消除全域性變數還是擴充套件性來說,DI 或者說 OOP 都是非常有必要的。

Gin + GORM 入門到實戰 // 程式設計師海軍

最近一直在學習 Go,目前在做專案熟悉 Go 階段。 本文來分享一下 Gin + GORM 的一些 開發體驗,有喜歡 Go 方向的朋友。

Go入門系列:你好,世界 // 似水流年

Go 原始碼需要先編譯,再分發和執行。如果是單 Go 原始檔的情況,我們可以直接使用 go build 命令 +Go 原始檔名的方式編譯。不過,對於複雜的 Go 專案,我們需要在 Go Module 的幫助下完成專案的構建。

go 如何從零編寫 protoBuf 外掛 // 海生

本期的主要內容將手把手教會大家,編寫 probuf 的 go 外掛,以我自己編寫的一個生成結構體的外掛為例子。

go 語言 web 開發框架 — gin 框架入門 // 良猿

安裝並配置 GO 工作區,在 GOPATH 的 src 目錄下新建專案資料夾,使用 go mod init命令初始化專案,使用 go get -u github.com/gin-gonic/gin 命令安裝 gin。

Go 語言與資料庫 — GORM 入門 // 良猿
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
Golang Copier 入門到入坑 // 小白要生髮

由於 golang 沒有對複雜結構體的 clone 方法,所以,就需要有 copier 這樣的工具庫。
它看起來很簡單,但實際使用中,有些“坑”還是要注意!

動圖圖解!怎麼讓 goroutine 跑一半就退出? // 小白debug

透過 runtime.Goexit() 可以做到提前結束協程,且結束前還能執行到 defer 的內容
runtime.Goexit() 其實是對 goexit0 的封裝,只要執行 goexit0 這個函式,當前協程就會退出,同時還能排程下一個可執行的協程出來跑。
透過 newproc 可以建立出新的 goroutine,它會在函式棧底部插入一個 goexit。
os.Exit() 指的是整個程式退出;而 runtime.Goexit() 指的是協程退出。兩者含義有區別。

Go 中呼叫外部命令的幾種姿勢 // darjun

本文介紹了使用 os/exec 這個標準庫呼叫外部命令的各種姿勢。同時為了便於使用,我編寫了一個 goexec 包封裝對 os/exec 的呼叫。這個包目前 for 我自己使用是沒有問題的,大家有其他需求可以提 issue 或者自己魔改

微服務框架 go-zero 快速實戰 // 阿兵雲原生

go-zero 是一個整合了各種工程實踐的 web 和 rpc 框架。透過彈性設計保障了大併發服務端的穩定性,經受了充分的實戰檢驗。
go-zero 中的 api,rpc,資料庫等涉及的程式碼,都可以給我們一鍵生成,無需耗費我們什麼精力

【5-5 Golang】實戰—Go微服務發現問題分析 // 蕃茄

初次遇到這問題時候,覺得匪夷所思。基於現狀,冷靜分析問題產生情況,一個一個去排查或者排除,切記急躁。
抓包驗證,二進位制協議又不方便分析,只能去研究zookeeper通訊協議了。最終還是需要一遍一遍Review程式碼,尋找蛛絲馬跡,不要忽視任何可能產生的異常。

Go ,淺談包管理模式 // 甜點cc

任何一門程式語言都離不開對各種工具包的使用,工具包的管理就顯得異常重要了。Go 的包管理方式是逐漸演進的,本文介紹 Go 語言的兩種包管理模式。

Go ,函式(包)的使用 // 甜點cc

本文透過一個實現加減乘除運算的小程式來介紹 go 函式的使用,以及使用函式的注意事項,並引出了對包的瞭解和使用。


# SegmentFault 技術週刊 #

「技術週刊」是社群特別推出的技術內容系列,一週一主題。

每週二更新,歡迎「關注」。大家也可以在評論處留言自己感興趣的主題,推薦主題相關的優秀文章。

如有問題可以新增小姐姐微信~

image.png

相關文章