Golang Option 模式看這一篇就夠了
在 Go 語言中,我們經常需要定義結構體,並通過構造函數初始化它們。然而,Go 不支持默認參數,如果一個結構體有很多可選參數,我們會面臨以下問題:構造函數參數過長,調用時不夠直觀。 需要維護多個 NewXXX 函數,擴展性較差。 代碼可讀性降低。 爲了解決這個問題,Golang 社區廣泛採用 Option 模式,讓我們可以優雅地管理可選參數。本文將詳細講解 Option 模式的 ⌘ Read more
My take on the discussion to introduce an ?
operator in Go 👈 No. For so many reasons.
golang 每日一庫之 shopspring-decimal
shopspring/decimal 是一個用於處理任意精度十進制浮點數的 Go 語言庫,通常用於金融計算、貨幣相關計算等場景。標準的 float64 類型可能無法滿足精確度要求,因爲浮點數的表示方式是近似的,特別是在進行累加、除法和精確比較時可能會導致舍入誤差。shopspring/decimal 提供了一個高精度的十進制類型 decimal.Decimal,它確保在進行數學運算時不丟失精度。這 ⌘ Read more
golang 每日一庫之 jinzhu-copier
這都 2025 年了,你還在一個一個手動複製字段嗎?jinzhu/copier 是一個 Go 語言庫,用於深度複製結構體(struct)及其字段,支持嵌套結構體、切片、數組等的複製。這個庫的主要目標是通過簡單的 API 提供高效、易用的對象複製功能,避免手動編寫複製邏輯。核心特性:深度複製支持深度複製結構體及其嵌套字段,包括切片、數組、映射(map)等。 對象的字段會遞歸地被複制到目標對象中 ⌘ Read more
[LFH] Revuo Monero is looking for python and golang (hugo) contributors!
There are a handful of open issues in Revuo Monero’s repositories: Calc and main. Feel free to take a peek and help if you are capable of and got the volunteering enthusiasm in you!
Links:
rottenwheel.com ⌘ Read more
使用 Golang 監控網絡速度
使用 Golang 監控網絡速度—————-在分佈式系統、實時應用和流媒體服務中,監控網絡速度可以幫助識別潛在的瓶頸、優化性能並提升用戶體驗。本文將介紹如何使用 Golang 構建一個高效的網絡速度監控工具,適合技術人員學習和參考。引言–網絡速度監控對於確保系統穩定運行至關重要。隨着互聯網用戶需求的增長,檢測網絡帶寬、下載和上傳速度成爲關鍵任務。Golang 以其高效的併發 ⌘ Read more
@prologic@twtxt.net YEAH it’s so cool!!! i was thinking about trying it as sorta practice for golang lol
fighting for my life trying to learn golang WHAT THE FUCK IS A POINTER (rhetorical)
i like this little ideas utility i’ve been using like i keep pulling up the idea table to see what i’ve added and it makes me wanna start one of them like the CLI app i wanna write in golang with charmbracelet’s bubbletea even though i only have a vague idea of what i want in a CLI app
如何使用 Golang 進行 Kafka 的監控
Kafka 是一個高吞吐量、可擴展的分佈式消息系統,廣泛應用於實時數據流處理場景。監控 Kafka 是確保其平穩運行和及時處理問題的關鍵。本文將介紹如何使用 Golang 來執行 Kafka 的監控任務。前置準備—-安裝依賴庫: 安裝 Sarama,用於 Kafka 的操作$ go get github.com/Shopify/sarama 安裝 Kafka 管理擴展$ go get g ⌘ Read more
爲你的 Go 應用添加定時任務
在 Linux 上,我們經常使用計劃任務來執行一些定時任務,比如,在凌晨執行數據庫備份、進行賬務日結操作等。在我們的 Golang 應用中,我們也想執行一些定時任務,怎麼辦?cron 是 Golang 的一個定時任務庫,被廣泛應用於 Golang 應用中。cron 目前使用的 V3 版本,默認支持 Linux cron 表達式,沒有秒的字段。Linux cron 表達式格式: comma ⌘ Read more
really wanna make an ssh zine app inspired by a telnet zine cms i found on github. i’m gonna probably go ahead with the telnet zine idea i have if i can get people for it but if i could build my own ssh mirror for it with golang and the charmbracelet wish library that’d be epic
Go Protobuf 新增全新不透明 API
Protobuf 是 Google 的語言中立的數據交換格式。早在 2020 年 3 月,就發佈了 google.golang.org/protobuf 模塊,這是對 Go protobuf API 的重大修訂。該包引入了對反射的一流支持、一個 dynamicpb 實現和 protocmp 包,以便於測試。現在,我們將爲生成的代碼發佈一個新的 API,我們將說明創建新 API 的動機,並展示如何在 ⌘ Read more
Golang 中的 Context 如何讓代碼更智能、更安全、更易於擴展
Go 開發中,context 包已經成爲一個必不可少的工具。它提供了一種在不同的 goroutine 之間傳遞請求範圍內變量、取消信號和截止時間的方法。通過合理地使用 context,我們可以使代碼變得更智能、更安全,並且更易於擴展。本文將詳細探討 context 的作用以及如何在實際開發中應用它。什麼是 Context?————context 是 Go 1.7 引入的一個標準庫 ⌘ Read more
Golang workspace 多模塊工作區是真的好
最近,使用了 Golang workspace,它是真的好。今日推薦給大家。Golang 在 1.18 版本開始支持多模塊工作區。使用多模塊工作區,可以幫助您同時在多個模塊中編寫代碼,並在這些模塊中輕鬆構建和運行代碼。要創建多模塊工作區,請確保你安裝的 Go 版本在 1.18 及以上纔行。我們以 Windows 爲例,演示如何創建工作區。一、創建一個目錄叫 workspace,這個是工作區的名稱。 ⌘ Read more
微服務的終極 Golang 框架:GoFr
前言–Go 語言因其出色的併發處理能力和簡潔的語法,成爲開發微服務的理想選擇。而 GoFr 框架則是一個專門爲構建 Go 微服務而設計的框架,它提供了一套完整的工具和最佳實踐,幫助開發者快速構建可靠的微服務應用。GoFr 框架簡介———GoFr 是一個專注於簡單性和性能的微服務框架。它的主要特點包括:零依賴:框架本身不依賴於任何第三方包 高性能:經過優化的路由和中間件系統 ⌘ Read more
golang 新一代標準日誌庫 slog
log/slog 是 Go 1.21 引入的一個新的日誌記錄包,旨在提供比傳統 log 包更靈活和現代化的日誌功能。它支持結構化日誌、可配置的日誌級別、靈活的日誌輸出格式等功能,彌補了舊版 log 包的不足。對比舊版 log 包 | 特性 | log | slog || — | — | — || 日誌級別支持 | 無 | 內置支持(Debug、Info 等) || 結構化日誌 | ⌘ Read more
Go 源碼是如何解決測試代碼循環依賴問題的?
最近我寫了一篇講解 context 包源碼的文章《Go 併發控制:context 源碼解讀》,在閱讀源碼的過程中,我在 context 包測試代碼中發現了一個解決循環依賴的小技巧,在此分享給大家。xtest.go 解決循環依賴context 包源碼目錄結構如下: https://github.com/golang/go/tree/go1.23.0/src/context$ tree contex ⌘ Read more
Gin 框架怎麼實現驗證請求參數和返回響應數據的函數?
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹在使用 Gin 框架開發時,入口函數通常需要支持驗證請求參數和返回響應數據。我們可以將驗證請求參數和返回響應數據整合爲一個通用函數。然後,結合響應數據返回中間件,實現通過一個函數,實現驗證請求參數和返回響應數據 的功能。02 請求參數驗證和返回響應數據首先,我們需要定義一個自定義結構體類型 Response,示例代碼: ⌘ Read more
Go 高級構建指南
本文將探索 Golang 高級構建技巧,從而有助於創建更高效的二進制文件。原文: Advanced Go Build Techniques[1]構建選項以下是 go build 命令最常用的一些選項:-o: 指定輸出文件名。默認輸出文件名是主軟件包的名稱,在 Windows 系統中會自動添加 .exe 後綴。 -v: 詳細輸出。該選項會在編譯時打印軟件包的名稱。 -work: 打印 ⌘ Read more
Go - Ollama 在本地構建你的 RAG 應用
這篇文章會引導大家使用 Golang 設置本地大型語言模型 (LLM) 並與之交互,以此在本地構建你的 AI 應用。設置本地 LLM首先,我們需要在本地計算機上運行 LLM。爲此,我們將使用 Ollama(可在 GitHub ollama[1] 上獲取)。雖然本地加載模型有多種選擇,但我發現 Ollama 是相對容易使用的。Ollama 支持 macOS、Linux 和 Windows。本文的代碼 ⌘ Read more
推薦一個 Go 版本的支付庫
gopay 是一個使用 Golang 編寫的支付庫。現在支持微信、支付寶、QQ、通聯支付、拉卡拉、PayPal。使用方法如下:引入 gopay 庫go get -u github.com/go-pay/gopay使用示例:import ( “github.com/go-pay/gopay” “github.com/go-pay/xlog”)func main() { xlog.I ⌘ Read more
kcp 協議的 Golang 實現庫
kcp-go 是 Golang 實現的 kcp 協議庫,它是可靠的 UDP 庫。該庫 kcp-go 旨在通過 UDP 數據包提供流暢、有彈性、有序、經過錯誤檢查和匿名的流傳遞。該庫和開源項目 kcptun 經過了戰鬥測試。從低端 MIPS 路由器到高端服務器,數以百萬計的設備在各種應用中部署了基於 kcp-go 驅動的程序。包括在線遊戲、直播、文件同步和網絡加速。我們介紹一下 kcp 協議,kcp ⌘ Read more
GoLang 如何獲取用戶輸入
fmt.Scanln() 與 fmt.Scanf() 需求場景:數就非常有用。比如,創建一個任務管理工具,可能需要用戶輸入任務名稱、截止日期等信息,這時就可以使用 fmt.Scanln () 或 fmt.Scanf () 來接收用戶輸入。 對於一些需要用戶交互的小型應用程序,比如簡單的計算器程序,可能需要用戶輸入數字和運算符,fmt.Scanf () 可以按照指定的格式接收 ⌘ Read more
理解 Go 協程調度的本質
作者:jiayan golang 的一大特色就是 goroutine,它是支持高併發程序的重要保障;通過 go 關鍵字我們就能輕易創建大量的輕量級協程,但它和我們認知中的線程有什麼區別呢,輕量在哪裏,具體是如何進行調度的….. 本文將從涉及到的一些基礎知識開始,逐步介紹到 go 協程調度的核心原理,希望你能有所收穫~ 函數調用棧進程在內存中的佈局首先回顧下進程的內存佈局~ 操作系統把磁盤上 ⌘ Read more
Go 開發者的密碼學導航:crypto 庫使用指南
Go 號稱 “開箱即用”,這與其標準庫的豐富功能和高質量是分不開的。而在 Go 標準庫中,crypto 庫(包括 crypto 包、crypto 目錄下相關包以及 golang.org/x/crypto 下的補充包) 又是 Go 社區最值得稱道的 Go 庫之一。crypto 庫由 Go 核心團隊維護,確保了最高級別的安全標準和及時的漏洞修復,爲開發者提供了可靠的安全保障。crypto 還涵蓋了從基 ⌘ Read more
golang 批量執行任務的通用模板
需求一個接口調用時,接收到一個列表,十個元素,需要併發執行十個任務,每個任務都要返回執行的結果和異常,然後對返回的結果裝填到一個切片列表裏,統一返回結果。需要協程處理的結構體type Order struct { Name string json:“name” Id int json:“id” }確定通道數量一般按入參的需要處理的元素數量爲準taskNum := 10 初始化通道or ⌘ Read more
5 分鐘搞懂 Golang 數據庫連接管理
本文介紹瞭如何在 Golang 中優化數據庫連接,通過有效管理連接來提高應用程序吞吐量。原文: Optimizing Database Connections in Go: Improving Throughput by Managing Open Connections Efficiently[1]Go 的 database/sql 軟件包提供了自動化數據庫連接池,能夠幫助開發人員有效管理連 ⌘ Read more
站內信消息未讀 - 已讀數據表設計 如何用 Golang 實現
今天我們來聊一個經常在後臺開發中遇到的話題——站內信消息的未讀 / 已讀狀態數據表設計,以及如何用 Golang 來實現這個功能。對於很多做過後臺開發的程序員來說,站內信系統幾乎是每個系統都會涉及到的功能之一。無論是用戶通知、系統提醒,還是訂單更新,站內信的使用都非常廣泛。不過,在實際的開發過程中,關於站內信消息的存儲、管理以及查詢等,往往會讓我們花上一些時間去設計和優化。特別是當我們需要處理未讀 ⌘ Read more
Go 協程正確用法基礎與進階
在 Go(Golang)的世界中,goroutines 是語言的瑰寶之一。它們輕量、高效,使開發者能夠輕鬆編寫併發和並行程序。但正如俗話所說,能力越大,責任越大。濫用 goroutines 可能導致內存泄漏、性能下降,甚至導致生產服務器崩潰。在這篇文章中,我們將介紹 goroutines 的基礎知識、最佳實踐,以及每個開發者應該瞭解的重要 “注意事項”。讓我們深入瞭解吧!Goroutines 概覽 ⌘ Read more
認識一下 Golang 定時框架
cron,相信玩過 Linux 的朋友應該都對這個很熟悉吧,這不就是計劃任務嘛,當你需要某個時間段去執行某一件事的時候,普通的執行方式已經不能滿足我們的需求了,這個時候就需要一個定時任務了,那麼下面我就來介紹一個 Go 的開源定時任務框架。一、安裝—- 下載go get github.com/robfig/cron/v3@v3.0.0 導入:這裏後面加個v3意味着這是v3版本,注意不要搞錯 ⌘ Read more
Gin 框架 JSON 格式返回結果的使用方式
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹Gin 框架爲 JSON、XML 和 HTML 渲染提供了易用的 API。本文我們主要介紹 JSON 的使用方式。02 JSON在 Go 項目開發中,當開發 HTTP API 時,我們通常提供 JSON 格式的返回結果。Go 框架爲 JSON 渲染提供了易用的 API。普通 JSON示例代碼:func main() { ⌘ Read more
Termux
same thing @doesnm uses and it worked 👍 Media
@doesnm@doesnm.p.psf.lt No it’s all good… I’ve just rebuilt it from master and it doesn’t look like anything is broken:
~/GitRepos> git clone https://github.com/plomlompom/htwtxt.git
Cloning into 'htwtxt'...
remote: Enumerating objects: 411, done.
remote: Total 411 (delta 0), reused 0 (delta 0), pack-reused 411 (from 1)
Receiving objects: 100% (411/411), 87.89 KiB | 430.00 KiB/s, done.
Resolving deltas: 100% (238/238), done.
~/GitRepos> cd htwtxt
master ~/GitRepos/htwtxt> go mod init htwtxt
go: creating new go.mod: module htwtxt
go: to add module requirements and sums:
go mod tidy
master ~/GitRepos/htwtxt> go mod tidy
go: finding module for package github.com/gorilla/mux
go: finding module for package golang.org/x/crypto/bcrypt
go: finding module for package gopkg.in/gomail.v2
go: finding module for package golang.org/x/crypto/ssh/terminal
go: found github.com/gorilla/mux in github.com/gorilla/mux v1.8.1
go: found golang.org/x/crypto/bcrypt in golang.org/x/crypto v0.29.0
go: found golang.org/x/crypto/ssh/terminal in golang.org/x/crypto v0.29.0
go: found gopkg.in/gomail.v2 in gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
go: finding module for package gopkg.in/alexcesaro/quotedprintable.v3
go: found gopkg.in/alexcesaro/quotedprintable.v3 in gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
master ~/GitRepos/htwtxt> go build
master ~/GitRepos/htwtxt> ll
.rw-r--r-- aelaraji aelaraji 330 B Fri Nov 22 20:25:52 2024 go.mod
.rw-r--r-- aelaraji aelaraji 1.1 KB Fri Nov 22 20:25:52 2024 go.sum
.rw-r--r-- aelaraji aelaraji 8.9 KB Fri Nov 22 20:25:06 2024 handlers.go
.rwxr-xr-x aelaraji aelaraji 12 MB Fri Nov 22 20:26:18 2024 htwtxt <-------- There's the binary ;)
.rw-r--r-- aelaraji aelaraji 4.2 KB Fri Nov 22 20:25:06 2024 io.go
.rw-r--r-- aelaraji aelaraji 34 KB Fri Nov 22 20:25:06 2024 LICENSE
.rw-r--r-- aelaraji aelaraji 8.5 KB Fri Nov 22 20:25:06 2024 main.go
.rw-r--r-- aelaraji aelaraji 5.5 KB Fri Nov 22 20:25:06 2024 README.md
drwxr-xr-x aelaraji aelaraji 4.0 KB Fri Nov 22 20:25:06 2024 templates
Gin 框架怎麼使用自定義驗證器?
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹Gin 框架自定義驗證器,分爲字段級別驗證器和結構體級別驗證器。其中結構體級別驗證器,可以用於跨字段驗證,也可以用於和字段級別驗證器結合使用。需要注意的是,結構體級別驗證器的優先級小於字段級別驗證器。02 字段級別自定義驗證器定義字段級別驗證器示例代碼:var userValidator validator.Func ⌘ Read more
一個強大可靠的 Golang 池化庫 ants
ants 是 golang 語言的一個強大的、可靠的池化解決方案庫。ants 是一個高性能的 goroutine 池,實現了對大規模 goroutine 的調度管理、goroutine 複用,允許使用者在開發併發程序的時候限制 goroutine 數量,複用資源,達到更高效執行任務的效果。它可以自動調度海量的 goroutine,複用 goroutine,以及定期清理過期的 goroutine,可 ⌘ Read more
只改變一個字符就能使 Golang 程序提速 42-
虎哥來聊聊怎麼用一個小小的改動,給你的 Golang 代碼提速 42%!很多時候,程序性能優化就是這樣:只要動一個字符,就可能帶來出人意料的提升。今天咱們就從切片傳遞優化、變量聲明優化和字符串拼接優化入手,看看怎麼改動這麼一個字符能讓 Golang 飛起來!🚀切片傳遞優化先來說說切片。切片在 Go 語言中用得特別多,因爲它們既靈活又方便。然而,切片的傳遞會帶來性能問題,尤其是當切片非常大時。原始代 ⌘ Read more
Gin 框架怎麼驗證綁定到結構體的字段?
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹在使用 Gin 框架開發項目時,通常我們選擇模型綁定的方式接收請求參數,我們在上一遍文章中,已經介紹過使用 Gin 框架接收請求參數的常用方式。本文我們主要介紹怎麼驗證綁定到結構體的字段,順便補充關於模型綁定的一些內容。02 模型綁定關於 Gin 框架的模型綁定,我們在上一篇文章中介紹了 ShouldBind 方法,該 ⌘ Read more
一文帶你看懂 Golang 最新特性
作者:騰訊 PCG 代碼委員會 經過十餘年的迭代,Go 語言逐漸成爲雲計算時代主流的編程語言。下到雲計算基礎設施,上到微服務,越來越多的流行產品使用 Go 語言編寫。可見其影響力已經非常強大。一、Go 語言發展歷史介紹Go 語言起源於 2007 年的 Google;創始人有三位,分別是 Ken Thompson、Rob Pike、Robert Griesemer;他們可謂是大佬中的大佬。最初的構 ⌘ Read more
Golang 編譯:靜態鏈接和動態鏈接
本文介紹了 Go 語言中靜態鏈接和動態鏈接的概念,解釋了它們的區別和各自優勢。通過示例,展示瞭如何生成靜態或動態鏈接的二進制文件,以及使用工具進行檢查。文章還討論了內部和外部鏈接器的區別,如何在編譯時選擇鏈接方式,以及在交叉編譯時處理 cgo 的方法。最後,提到了減小二進制文件大小的技巧和安全性方面的考慮。概述–Go 語言最大的優勢之一就是它的編譯器,它爲程序員抽象了許多細節,讓你可以輕鬆地爲幾 ⌘ Read more
Golang 解釋器:Yaegi 內部實現
Yaegi[2] 是一個用 Go 語言編寫的 Go 語言解釋器。這個項目最初是在 Traefik-Labs 啓動的, 目的是爲 traefik 反向代理提供一個簡單實用的嵌入式插件引擎。現在, 社區貢獻的 200 多個插件已經列在 plugins.traefik.io[3] 的公共目錄中。Yaegi 的使用也擴展到其他領域, 例如 數據庫 [4] 、 可觀察性 [5] 、 容器安全 [6] ⌘ Read more
Golang 策略設計模式
本文主要介紹了在 Golang 中實現策略設計模式(Strategy Design Pattern)的方法和優勢。策略設計模式是一種用於處理多種相似算法或行爲的設計模式,允許在運行時動態切換算法。原文: Strategy Design Pattern in Golang[1]假設有一個名爲 PaymentStrategy 的接口,包含一個名爲 Pay() 的方法,有兩種名爲 CreditCar ⌘ Read more
萬字長文講透 Go 程序性能優化
性能分析和優化是所有軟件開發人員必備的技能,也是後臺大佬們口中津津樂道的話題。Golang 作爲一門 “現代化” 的語言,原生就包含了強大的性能分析工具 pprof 和 trace。pprof 工具常用於分析資源的使用情況,可以採集程序運行時的多種不同類型的數據(例如 CPU 佔用、內存消耗和協程數量等),並對數據進行分析聚合生成的報告。trace 工具則關注程序運行時的事件(例如協程狀態切換,G ⌘ Read more
一個比較 tricky 的 Golang 問題: 最大協程數量
在 Go 語言面試中, 關於 “可以產生的最大協程數量” 這個問題有時會讓候選人措手不及。答案並不是簡單地給出一個具體數字。面試官通常用這個問題來評估你對 Go 併發模型、內存管理以及協程實踐經驗的理解。理解 Go 的併發模型和協程效率首先需要明確以下幾點:協程是由 Go 運行時管理的輕量級用戶空間線程, 比傳統的操作系統線程更高效 Go 並沒有對協程數量設置嚴格限制, 在合適的條件下, 你可以同 ⌘ Read more
10 個最佳 Golang 庫
10 個最佳 Golang 庫—————在 Golang 中,我們可以找到垃圾回收、可接受的庫和標準的類型系統。Golang 適用於系統編程,也被稱爲包。Go 語言被稱爲 Golang 是因爲它在編程語言 GO 中收集了一些可重用的代碼組件。在 Go 語言中,包在組織和結構化代碼方面起着重要作用,還提高了可讀性、代碼可重用性和可維護性。這裏爲你介紹十個最佳 Golang 庫。這 ⌘ Read more
一個小例子,給你講透 Go 配置管理,輕鬆將其融入到項目中
在軟件開發中,配置管理是一個不可或缺的部分。無論是開發環境、測試環境還是生產環境,我們都需要一種方法來存儲和讀取配置信息。在 Golang 項目中,Viper 是一個非常流行且功能強大的庫,用於處理配置文件。下面我會寫一些例子,幫助大家快速上手。什麼是 Viper?———-不賣關子,直接上 GitHub 地址:https://github.com/spf13/viper 大家可以直接去 ⌘ Read more
Golang 隨機公平庫 satmihir-fair
FAIR 是一個 Go 庫, 旨在確保資源受限環境中的公平性。它有助於在資源短缺時將有限的資源 (例如數據庫 / blob 存儲吞吐量、作業執行資源等) 均勻分配給多個客戶端, 防止基於客戶端行爲的過度分配和飢餓。 簡介–FAIR 的核心算法基於 隨機公平 BLUE[1] , 這種算法通常用於網絡擁塞控制, 但做了一些修改。FAIR 的理念是隻在真正資源短缺時進行限制, 而不是像令牌桶或漏桶等 ⌘ Read more
使用 Go 構建分佈式系統:基於 gRPC 的主從節點架構
在現代軟件開發領域,分佈式系統已經變得至關重要。它們使服務能夠擴展、處理大量數據並提供高可用性。本文將指導您使用 Golang 構建一個簡單的分佈式系統,該系統利用主節點和單個工作節點,並使用 gRPC 協議進行通信。這種架構非常適合數據處理、並行計算和大規模處理工作負載等分佈式任務。我們將介紹如何設置主從結構、建立基於 gRPC 的通信,以及實現簡單的任務分配和執行流程。系統概述—-我們的分 ⌘ Read more
Golang 常用的五種創建型設計模式
在 Go 中,創建設計模式有助於管理對象的創建,並控制對象的實例化方式。這些模式在對象創建過程複雜或需要特殊處理時特別有用。以下是 Go 中常用的主要創建模式:單例模式單例模式確保一個類只有一個實例,並提供一個全局訪問點。如何實現定義一個結構,並將其作爲單個實例。 爲該結構創建一個全局變量,但不要立即將其初始化。 使用 sync.Once 確保實例只創建一次,即使在多線程情況下也是如此 ⌘ Read more
解析 Golang sync-Once 用法和原理
Once is an object that will perform exactly one action.sync.Once 是 Go 標準庫提供的使函數只執行一次的實現,常應用於單例模式,例如初始化配置、保持數據庫連接等。它可以在代碼的任意位置初始化和調用,因此可以延遲到使用時再執行,併發場景下是線程安全的。對外接口Once 對外僅暴露了唯一的方法 Do(f func()),f 爲需要執行的 ⌘ Read more
IP 訪問限制及提交次數,用 golang 如何實現 ?
在 Web 應用中,通常會需要對 IP 訪問進行限制以及控制提交次數,以防止惡意攻擊(例如暴力破解、DoS 攻擊、API 濫用等)。爲了實現這一功能,我們可以結合 Golang 的特性,使用中間件或者基於 Redis 這樣的緩存服務來實現 IP 限制和提交次數的控制。實現步驟IP 訪問限制:對每個 IP 的訪問頻次進行限制,比如每個 IP 每分鐘只能訪問某個接口 10 次。超過限制後,返回錯誤信息 ⌘ Read more
解讀 Golang 標準庫裏的 varint 實現
最近發現 Golang 標準庫竟然自帶了 varint 的實現,代碼位置在 encoding/binary/varint.go。剛好藉助 golang 標準庫的 varint 源碼,我們來系統地學習和梳理下 varint。熟悉 protobuf 的人肯定對 varint 不陌生,protobuf 裏面除了帶 fix (如 fixed32、fixed64) 之外的整數類型, 都是 varint 編碼 ⌘ Read more
溫故知新——Golang GMP 萬字洗髓經
0 前言—-我在 23 年初曾發佈過一篇——golang gmp 原理解析,當時剛開始接觸 go 底層源碼,視野廣度和理解深度都有所不足,對一些核心環節的思考和挖掘有所欠缺,對其中某些局部細節又過分拘泥,整體內容質量上還是有所不足.隨着近期嘗試接觸了 golang 以外的語言,通過橫向對比後,對於 golang 中 gmp 的精妙設計也產生了一些新的感悟. 於是就藉着這個契機開啓一個重置篇,對 ⌘ Read more
golang 是如何防範 SQL 注入、CSRF、XSS 攻擊 的
在 Go 語言的 Web 開發中,常見的安全問題包括 SQL 注入、CSRF(跨站請求僞造)、和 XSS(跨站腳本攻擊)。Go 提供了多種機制與工具庫來防範這些攻擊。以下是針對每種攻擊的防範措施:防範 SQL 注入————SQL 注入 是一種通過修改 SQL 查詢的輸入,使攻擊者能夠執行未授權 SQL 語句的攻擊手段。防範 SQL 注入的關鍵是避免直接拼接 SQL 字符串,而是使用 ⌘ Read more
在兩個大文件中找出相同的記錄,用 golang 如何寫?
在 Go 語言中找出兩個大文件中相同的記錄,可以採用以下策略:思路讀文件:按行逐行讀取兩個文件中的記錄,假設每個文件的每一行代表一條記錄。 使用哈希集合(Set):因爲哈希集合能夠快速判斷某個記錄是否存在,所以我們可以將第一個文件中的記錄放入集合中,之後讀取第二個文件時逐行判斷該記錄是否也存在於集合中。如果存在則是相同的記錄。 性能優化: 如果文件非常大,避免一次性全部加載到內存 ⌘ Read more
Honestly… not much. Have abandon two projects (both private) on Golang and one related to cryptography. My mostly languages are Python and Javascript (also can PHP). After writing code on Go i spend same time on fixing dumb errors
Same! Great joke!
http 請求超時 ,你用 golang 是如何解決的?
在 Golang 中,當進行 HTTP 請求時,處理超時是很重要的,尤其在網絡不穩定或服務器響應緩慢的情況下。Golang 提供了靈活的方式來處理 HTTP 請求的超時問題。常見的方式有通過設置http.Client的超時屬性、使用上下文(context.Context)進行超時控制,以及使用自定義的http.Transport。解決 HTTP 請求超時的幾種方式1. 使用 http.Client ⌘ Read more
Golang 中你應該知道的 noCopy 策略
在 Go 開發中,我們經常遇到 noCopy 這種結構體,並伴隨一個常見的註釋 “must not be copied after first use”。本文將深入探討 noCopy 的作用,以及 Go Vet 如何幫助我們避免潛在的錯誤。sync.noCopy 的作用—————–sync.noCopy 結構體通常與 sync.WaitGroup 等同步原語一起出現,例如:t ⌘ Read more
使用 Redis 和 Golang 解決併發問題
在構建分佈式系統和數據庫(如 Redis)時,併發問題可能會出現。本文將通過一個股票交易的例子,展示如何使用 Redis 和 Golang 來解決這些問題。問題定義—-場景: 構建一個股票交易應用,多個用戶可以同時購買不同公司的股票。每個公司都有一個剩餘的股票數量,用戶只能購買剩餘的股票。代碼:type Repository struct { client goRedis.Client}fu ⌘ Read more
萬字解析 golang netpoll 底層原理
1 基礎理論鋪墊 ======== 1.1 io 多路複用———–在正式開始,我們有必要作個預熱,提前理解一下所謂io多路複用的概念.拆解多路複用一詞,所謂多路,指的是存在多個待服務目標,而複用,指的是重複利用一個單元來爲上述的多個目標提供服務. 聊到 io 多路複用時,我比較希望舉一個經營餐廳的例子——一個餐館在運營過程中,考慮到人力成本,一個服務員往往需要同時爲多名 ⌘ Read more
Golang 實用技巧:使用 go-nanoid 高效生成唯一隨機 ID
作爲一名程序員,我們經常會遇到需要生成唯一標識符(ID)的場景。不管是創建用戶 ID、訂單號還是其他需要唯一性的數據,生成隨機且唯一的 ID 是保證系統健壯性的基礎之一。在 Go 語言中,有很多方法可以實現這一功能,今天我想和大家聊聊如何使用 go-nanoid 這個庫來生成隨機的唯一 ID。go-nanoid 是一個 Go 語言庫,用來高效地生成唯一的隨機 ID(類似於 UUID),並且生成的 ⌘ Read more
Go 語言併發編程之互斥鎖 sync-Mutex
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹Go 標準庫 sync 提供互斥鎖 Mutex。它的零值是未鎖定的 Mutex,即未被任何 goroutine 所持有,它在被首次使用後,不可以複製。我們可以使用 Mutex 限定同一時間只允許一個 goroutine 訪問和修改臨界區。02 使用在介紹怎麼使用 Mutex 之前,我們先閱讀 sync.Mutex 源碼 ⌘ Read more
Golang 實現 IP 地址掃描
你是否想過哪些設備連接到了家裏的 Wi-Fi 網絡?無論是出於安全目的還是單純的好奇心,我們都可以去了解一下家庭網絡中的設備情況。在本文中,我們將介紹如何使用 Go 構建一個簡單的 IP 地址掃描器,它可以掃描家庭網絡並列出所有活動設備。爲什麼要構建 Ip scanner市面上有很多網絡掃描工具,但自己構建網絡掃描工具能讓我們靈活地理解和修改代碼,以滿足需求。此外,這還是學習 Go 網絡編程的好方 ⌘ Read more
Golang 使用 upx 減少可執行文件的大小
衆所周知,Golang 的編譯速度是非常之快的。在設計 Go 時,編譯速度是一個重要的考慮因素。但是,你是否關注過 Go 編譯代碼後生成的二進制可執行文件的大小?讓我們來看一個簡單的 HTTP 服務的應用示例:import ( ”fmt” ”net/http” ) func main() { // create a http server and creat ⌘ Read more
Go 開發人員開發 WebRTC 的福音
Pion 是 WebRTC API 的純 Golang 實現。開發 WebRTC 應用可以使用該庫,提高開發效率。你可以使用 Pion 去創造一些很棒的東西,以下是一些可以讓你創意源源不斷的想法:發送一個視頻文件到多個瀏覽器,以實現完美同步的電影觀看。 將嵌入式設備上的網絡攝像頭內容發送到瀏覽器,無需額外的服務器。 不需要訂閱發佈,就可以在兩臺服務器之間安全地發送數據。 ⌘ Read more
GVM: Golang 多版本管理利器
本文介紹了 Go Version Manager 的功能和使用方法,介紹瞭如何通過 GVM 在系統上安裝和管理多個 Go 語言版本。原文: GVM: Go Version Manager, for Golang manage multiple versions[1]Go 版本管理器(GVM,Go Version Manager)是一款功能強大的工具,旨在簡化系統中 Go 編程語言不同版本的管理 ⌘ Read more
Golang 中強大的重試機制,解決瞬態錯誤
在分佈式系統和網絡編程領域,優雅地處理瞬態錯誤是構建健壯應用程序的關鍵。重試機制是一種有效的策略,用於應對這些短暫的輕微故障。本文將深入探討如何在 Golang 中創建強大的重試機制,並提供詳細的代碼示例。瞬態錯誤的挑戰——-瞬態錯誤通常發生在網絡操作中,可能包括網絡超時、服務器暫時不可用或其他短暫故障。這些錯誤通常是短暫的,可以通過重試來解決。然而,簡單地重複執行操作並不總是最佳方案,因 ⌘ Read more
探索 Goja: 一個 Golang JavaScript 運行時
本文探討了 Golang 生態系統中的 JavaScript 運行時庫 Goja[1] 。Goja 作爲一個在 Go 應用程序中嵌入 JavaScript 的強大工具脫穎而出, 在操作數據和提供無需 go build 步驟的 SDK 方面具有獨特優勢。背景: 爲什麼需要 Goja在我的項目中, 在查詢和操作大型數據集時遇到了挑戰。最初, 所有內容都是用 Go 編寫的, 這很高效, 但在處理複雜的 ⌘ Read more
Golang 脫敏擴展包:簡化敏感信息處理的利器
背景在數據處理或清洗項目中,我們經常需要對敏感信息進行脫敏處理。這些敏感信息包括但不限於身份證號、手機號、郵箱地址和銀行卡號等。爲了簡化這類任務,可以編寫一個 Golang 的脫敏擴展包。該包封裝了一些常用的脫敏方法,以便在未來的開發中能更方便地進行敏感信息的處理,確保數據的安全和隱私保護。包地址該脫敏擴展包的代碼託管在 GitHub 上,可以通過以下鏈接訪問和下載:https://github ⌘ Read more
Golang 演示 10 種設計模式
作者:knightwwang golang 演示常見的十種設計模式的應用場景。1. 單例模式(Singleton Pattern)單例模式是一種創建型設計模式,它限制了實例化類的對象個數,確保在任何情況下,一個類只有一個實例,並且提供一個全局訪問點。這種模式在需要全局狀態控制或共享資源訪問時非常有用。特點:只有一個實例對象。 必須自行創建實例對象。 必須提供一個訪問該實例的全局訪問點 ⌘ Read more
Golang - 使用 GoFakeIt 生成 Mock 數據
介紹–在軟件開發中,測試至關重要,以確保代碼能夠按預期工作。然而出於隱私考慮、數據可用性以及收集和清理數據,使用真實數據進行測試是不合理的。我們需要生成 Mock 數據來進行測試。在 Go 編程語言中,用於生成假數據的最流行庫之一是 GoFakeIt[1]。什麼是 GoFakeIt?————-GoFakeIt 是一個強大的庫,允許開發人員爲測試目的生成各種隨機數據。它支持創建名字 ⌘ Read more
Golang 實現帶過期時間的單機鎖
單機鎖要實現的目標:加鎖:會記錄一個鎖的擁有者 owner 解鎖:只有鎖的擁有者才能解鎖 如果有設定鎖的超時時間,到時間自動解鎖(避免忘記解鎖) 代碼很簡單,直接貼源碼。相信聰明的你一看就懂項目地址: https://github.com/gofish2020/expiredlockpackage expiredlockimport ( “bytes” “context” “fm ⌘ Read more
Go 項目結構的簡潔實現
今天分享一個在 GitHub 上有 3.5k stars 的 Go 項目:go-backend-clean-arch[1]。該項目展示了一個 Golang 後端項目如何設計優雅的項目結構。項目架構——-3.Directory Explanation———————–.├── Dockerfile # Image file├── api│ ⌘ Read more
golang 日誌打印 如何添加 goroutinei
在 Go 語言中,標準庫沒有直接提供獲取 goroutine ID 的功能,因此,如果我們想在日誌中添加 goroutine ID,需要藉助一些非標準的方式來實現。方法 1: 通過第三方庫(如 github.com/petermattis/goid)github.com/petermattis/goid 是一個常用的第三方庫,它可以幫助我們獲取當前 goroutine 的 ID。我們可以通過它來實 ⌘ Read more
Golang 面試題:strings 和 strconv 包
作爲一種基本數據結構,每種語言都有一些對於字符串的預定義處理函數。Go 中使用 strings 包來完成對字符串的主要操作。4.7.1 前綴和後綴———–HasPrefix 判斷字符串 s 是否以 prefix 開頭:strings.HasPrefix(s, prefix string) boolHasSuffix 判斷字符串 s 是否以 suffix 結尾:strings.HasS ⌘ Read more
瞭解 Golang 中的內存管理:Stack vs Heap
內存管理是編程的一個重要方面,瞭解內存管理的工作原理會極大地影響應用程序的性能和效率。在 Golang 中,內存分配主要通過兩個區域進行管理:棧和堆。在本文中,我們將探討堆棧和堆內存的區別、Golang 如何處理這些分配,並提供實際示例來說明這些概念。Stack堆棧是什麼?堆棧是以後進先出(LIFO)方式運行的內存區域。它用於存儲局部變量和函數調用信息,如返回地址、參數和局部變量。堆棧因其後進先出 ⌘ Read more
你知道 golang 中 sysmon 有什麼作用嗎?
在 Go 語言的運行時 (runtime 包) 中,sysmon 是一個系統監視器 (system monitor) 線程,它在 Go 運行時中扮演着非常重要的角色。sysmon 的主要職責是維護 Go 程序的健壯性和響應性,確保垃圾回收 (Garbage Collection, GC)、搶佔調度 (Preemptive Scheduling)、定時器 (Timers) 和一些其他後臺任務能夠及時 ⌘ Read more
Golang 高併發應用中的數據庫連接死鎖
在構建高併發的 Go 應用時, 數據庫連接池的使用是不可或缺的。然而, 如果使用不當, 連接池也可能成爲性能瓶頸, 甚至導致整個應用陷入死鎖。本文將深入探討 Golang 中數據庫連接死鎖的原因、影響以及解決方案, 幫助開發者構建更加健壯的應用程序。數據庫連接池的工作原理———–在深入討論連接死鎖之前, 我們需要先了解數據庫連接池的工作原理。連接池本質上是一個連接的緩存, 它可以避免 ⌘ Read more
from my understanding.. i don’t know how the multiplexing works when its being proxied through another server. I know go has support for it if you call it out directly. https://pkg.go.dev/golang.org/x/net/http2
一文搞定 Golang 反射 -Reflect-
Go (Golang) 中的反射是一項強大的功能,它允許程序在運行時檢查自身的結構和值。這一功能由 reflect 包提供。反射通常用於序列化 / 反序列化、構建泛型庫和測試等任務。本文將概述反射在 Go 中的工作原理,並提供實際示例。基本概念Type: 值的類型,(如 int、string、float、struct)。 Value: 變量的實際數據。 kind: 類型的具體類別(如 ⌘ Read more
@movq@www.uninformativ.de If it still existed I bet the first thing he’d do is convert it to Golang 👌🤣
golang 做 api 開發離不開簽名驗證- 如何設計?
在 API 開發中,簽名驗證是一種常見的安全措施,用於確保請求的完整性和來源的可靠性。以下是設計一個簽名驗證機制的步驟和示例代碼。設計思路密鑰管理:爲每個客戶端分配一個唯一的 API 密鑰和 API 密鑰。 簽名生成:客戶端在請求 API 時,使用預定義的算法生成簽名,並將簽名和其他必要參數(如時間戳、隨機數等)一起發送到服務器。 簽名驗證:服務器接收到請求後,根據相同的算法重新生成簽 ⌘ Read more
在 golang 裏使用 ZooKeeper,如何使用
在 Go 語言中使用 ZooKeeper,可以藉助第三方庫go-zookeeper。下面介紹如何安裝和使用這個庫與 ZooKeeper 進行交互。安裝 go-zookeeper 庫首先,需要安裝go-zookeeper庫。使用go get命令來安裝:go get github.com/samuel/go-zookeeper/zk使用 ZooKeeper 的基本示例以下是一個簡單的示例,包括連接 Z ⌘ Read more
Go 語言定時任務 time-Sleep 和 time-Tick 的優劣對比分析
golang 寫循環執行的定時任務,常見的有以下三種實現方式 1、time.Sleep 方法:for { time.Sleep(time.Second) fmt.Println(“我在定時執行任務”)}2、time.Tick 函數:t1:=time.Tick(3time.Second)for { select { case <-t1: fmt.Println(“t1定時 ⌘ Read more
Golang - range 迭代器揭祕
簡介我們正在使用 Go 語言編寫 Dolt[1] ,這是世界上第一個版本控制的 SQL 數據庫。像大多數大型 Go 代碼庫一樣,我們有很多需要迭代的集合類型。 Go 1.23 的新特性 [2] 中,你現在可以使用 range 關鍵字來迭代自定義集合類型。這是如何工作的? 這是個好主意嗎? 讓我們深入探討一下。如果你想運行本教程中的任何代碼,你需要 安裝 Go 1.23 發佈候選版 [3] ,或者在 ⌘ Read more
Golang 面試題:原子操作和鎖
1、問題描述原子操作和鎖的區別是什麼?2、問題解答原子操作和鎖是併發編程中常用的兩種同步機制,它們的區別如下:1、作用範圍:原子操作(Atomic Operations):原子操作是一種基本的操作,可以在單個指令級別上執行,保證操作的原子性。原子操作通常用於對共享變量進行讀取、寫入或修改等操作,以確保操作的完整性。 鎖(Lock):鎖是一種更高級別的同步機制,用於保護臨界區(Critical ⌘ Read more
構建並運行 eBPF 應用 - Part 2
在上一篇文章中,我們用 C 語言創建了一個 eBPF 程序,以瞭解某個進程使用 CPU 的時間。這些數據隨後被存儲在 BPF HashMap 中。但這是一個不斷更新的短期存儲位置,數據的壽命很短…… 我們該如何利用這些數據呢?這就是用戶空間程序的用武之地。用戶空間程序不在內核空間運行,但可以附加到 eBPF 程序並訪問 BPF HashMap。現在讓我們來看看如何用 Golang 編寫用戶 ⌘ Read more
Golang 實現坦克世界
Golang 實現坦克世界項目地址: https://github.com/gofish2020/tankgame 歡迎 Fork && Star遊戲效果—-本項目基於遊戲引擎 Ebitengine 開發,這裏有很多的實例 https://ebiten-zh.vercel.app/examples/ 便於邊學邊用程序下載到本地,直接 go run main.go即可看效果。開發使用的go1.2 ⌘ Read more
理解並使用 Golang 的 “omitempty” 特性
在使用 Go (Golang) 並將數據編碼爲 JSON 時,您可能會遇到這樣的情況:如果某些字段的值爲空,則需要從編碼輸出中省略這些字段。這就是 Golang 的 omitempty 功能發揮作用的地方。struct 字段標記中的 omitempty 選項會告訴編碼器,如果字段爲空值,則跳過該字段。什麼是 “Empty Value”?在 Go 中,Empty Value 的定義是:布爾類型爲 ⌘ Read more
構建並運行 eBPF 應用 - Part 1
本文將介紹如何使用 C 和 Golang 編寫第一個 eBPF 程序。我們將在第一部分介紹實際的 eBPF 程序,在第二部分介紹用戶空間應用程序。準備工作本文開發所運行的操作系統是:OS: Ubuntu 22.04Linux Header Version: 6.5.0–14-generic還通過 apt 安裝了一些依賴項:sudo apt-get -y install libbpf bpfcc-t ⌘ Read more
Gaby - Golang 社區機器人
Gaby 是一個實驗性的新機器人, 在 Go 問題跟蹤器中以 @gabyhelp[1] 的身份運行, 試圖自動化各種機器可以合理完成的瑣碎事務, 同時也試圖發現機器可以合理完成的新事物。gaby 這個名字是 “Go AI Bot” 的縮寫, 因爲這個實驗的目的之一是瞭解 LLM 可以有效用於哪些方面, 包括識別它們不應該用於哪些方面。一些 gaby 功能將涉及 LLM; 其他功能則不會。指導原則是 ⌘ Read more
以 Go 語言爲例解釋什麼是僞共享以及如何解決
本文翻譯自:What’s false sharing and how to solve it (using Golang as example)譯文在解釋僞共享(false sharing)之前,有必要簡要介紹一下 CPU 架構中緩存是如何工作的。CPU 緩存中的最小單位是緩存行(cache line)(如今,CPU 中常見的緩存行大小爲 64 字節)。因此,當 CPU 從內存讀取一個變量時, ⌘ Read more
Golang 編寫範型集合,官方文檔未提及的訣竅
引言–Go 的泛型功能在 Go 1.18 版本中發佈, 至今已有兩年多了。我們正在使用 Go 開發 Dolt[1] , 這是世界上第一個支持版本控制的 SQL 數據庫。儘管我們有數十萬行 Go 代碼, 但我們並沒有大量使用泛型。我們在一些地方使用泛型 來加速代碼中的高流量部分 [2] , 但總的來說, 除了 slices[3] 和 maps[4] 包中的一些有用的庫方法外, 我們還沒有找到使用泛 ⌘ Read more
Golang 發起 http 請求:GET 帶參數、POST 發送 Form 和 JSON 數據
1、發起 GET 請求———–使用net/http 可以很容易發起 get 請求package mainimport ( ”fmt” ”io” ”net/http”)func main() { resp, := http.Get(”https://httpbin.org/get”) defer resp.Body.Close() body, : ⌘ Read more
NeoVim 打造成跟 Goland 一樣好用的 IDE
在軟件開發領域,集成開發環境(IDE)的選擇對程序員的效率和生產力起着舉足輕重的作用。對於尋求精簡而強大的編碼體驗的 Golang 開發者來說,配置 Neovim 是一個不錯的選擇。本文分享完整的 Golang NeoVim 的設置,幫助你將 NeoVim 打造成媲美 Goland 的開發環境。初始設置將以下內容添加到 .vimrc 或 init.vim 文件中。set expandtabset ⌘ Read more
Golang Context 內部原理一覽
context[1] 包是每個 Go 語言程序員在編程生涯中都會使用到的, 但你們真的瞭解它的內部工作原理嗎 (因爲據說真正的美麗都藏在內在)? 如果你對此感興趣, 可以查看我之前關於 sync.WaitGroup 內部工作原理的博文 鏈接 [2] 。本文旨在簡要概覽內部工作原理, 因此我會適當簡化一些細節。如果你想查看全部的實現細節, 或者你更喜歡直接閱讀源代碼而不是博客, 可以 點擊這裏 ⌘ Read more
Go singlefight 源碼詳解
寫在前面 通俗的來說就是 singleflight 將相同的併發請求合併成一個請求,進而減少對下層服務的壓力,通常用於解決緩存擊穿的問題。詳解基礎結構—-golang.org/x/sync/singleflight singleflight 結構體:type call struct { wg sync.WaitGroup // 這些字段在 WaitGroup 結束前寫入一次 // 只有在 W ⌘ Read more
使用 Golang 開發 eBPF 的應用
大多數時候, 我們在開發軟件或使用軟件時, 都在操作系統的安全邊界內運行。我們甚至不知道 IP 數據包是如何從網絡接口被接收的, 或者當我們保存文件時, inode 是如何被文件系統處理的。這個邊界被稱爲用戶空間, 我們在這裏編寫應用程序、庫和工具。但還有另一個世界, 即內核空間。操作系統內核就駐留在這裏, 負責管理系統資源, 如內存、CPU 和 I/O 設備。通常我們不需要深入到 socket ⌘ Read more
10 分鐘瞭解 Golang 泛型
泛型是 Golang 在 1.18 版本引入的強大工具,能夠幫助我們在合適的場合實現簡潔、可讀、可維護的代碼。原文: Go Generics: Everything You Need To Know[1]導言可能有人會覺得 Go 泛型很難,因此想要借鑑其他語言(比如 Java、NodeJS)的泛型實踐。事實上 Go 泛型很容易學,本文希望能幫助讀者更好的理解 Go 泛型。 👉注:本文不會將 ⌘ Read more
GO 語言學習筆記: 垃圾回收機制剖析
一、引言—-(一)垃圾回收 概述垃圾回收(Garbage Collection,GC) 是 Go 語言的核心特性之一,是實現內存自動管理的一種形式。golang 的自動垃圾回收屏蔽了複雜且容易出錯的內存操作,讓開發變得更加簡單、高效。在 Go 語言中,從實現機制上來說,垃圾回收可能是最複雜的模塊了。瞭解垃圾回收的機制,有助於更好地理解 Go 語言的內存管理機制,從而更好的使用 Go 語言進行開 ⌘ Read more