Go 語言學習筆記:深入理解匿名函數與閉包
一、引言—-在 Go 語言中,匿名函數與閉包是兩個重要的概念,它們增強了 Go 語言的表達力和功能性,使得代碼更加簡潔和強大。 本文將深入探討 Go 語言中的匿名函數與閉包,幫助讀者更好地理解和應用這兩個概念。匿名函數在 Go 語言中提供了一種靈活的方式來定義即用即拋的函數邏輯,減少了命名負擔並且可以直接在代碼中嵌入。閉包則允許匿名函數捕獲並持有其定義時作用域中的變量,使得函數具有狀態,這對於 ⌘ Read more
Go 線程同步
線程同步—-通常在 Go 語言中有兩種方法可以用來做線程同步sync.Cond channel channel 的很好理解,當我們從一個 channel 中接收數據的時候,如果裏面沒有數據,那我們直接就阻塞在那裏了;在這篇文章中就來看看怎麼使用 sync.Cond 完成同步sync.Cond———「定義結構體和方法」type BlueberryInt struct { ⌘ Read more
使用 Go 語言的 bytes 包高效地操作字符串
在編程語言 Go 中,bytes包提供了一系列用於操作[]byte類型的函數,這非常有用,特別是當你需要處理大量的字符串和切片時。通過使用bytes.Buffer,你可以高效地構建和修改字符串,而不必擔心頻繁的內存分配和字符串拼接導致的性能問題。下面,我們將深入瞭解如何使用bytes.Buffer,並通過豐富的示例演示它的強大功能。Buffer 的基本用法————bytes.Buf ⌘ Read more
Golang 狀態機設計模式
本文介紹了 Golang 狀態機模式的一個實現示例,通過該模式,可以解耦調用鏈,有助於實現測試友好的代碼,提高代碼質量。原文: Go State Machine Patterns[1]導言在我們開發的許多項目中,都需要依賴某種運行狀態從而實現連續操作。這方面的例子包括:解析配置語言、編程語言等 在系統、路由器、集羣上執行操作… ETL(Extract Transform Loa ⌘ Read more
How to Find a Misplaced Apple Watch with iPhone’s Ping My Watch
If you’re an Apple Watch user, you should know about a convenient feature for iPhone that helps you to easily find a misplaced Apple Watch. Much like how you can ping an iPhone with Apple Watch to find an iPhone, you can now go the other direction too, by pinging your Apple Watch from your … Read More ⌘ Read more
Go 語言中,HTTP 請求流式是如何寫入 body 的?
最近在開發一個功能時,需要通過 http 協議上報大量的日誌內容,但是在 Go 標準庫裏的 http client 的 API 是這樣的: http.NewRequest(method, url string, body io.Reader)body 是通過 io.Reader 接口來傳遞,並沒有暴露一個 io.Writer 接口來提供寫入的辦法,先來看看正常情況下怎麼寫入一個 body ,示例 ⌘ Read more
Go 項目文件命名規範是什麼?
計算機科學中只有兩件難事:緩存失效和命名。—— 菲爾 · 卡爾頓(Phil Karlton)。在編程世界中,選擇正確的命名約定是打開可讀和可維護代碼大門的重要途徑。在使用 Go 語言開發大型項目時,文件命名是構建清晰項目結構的關鍵一環,一個合理的文件命名規範不僅能提高開發效率,還能降低團隊協作中的溝通成本。在這篇博文中,我們將深入探討 Go 中命名的最佳實踐。在探討 Go 文件命名規範之前,我 ⌘ Read more
Google 官方發佈 Go 語言編碼規範
在現代軟件開發中,代碼的可讀性和一致性是至關重要的。尤其是當團隊規模擴大時,遵循一致的編碼規範可以顯著提高代碼的可維護性和團隊協作效率。本文將深入探討 Go 語言的 Google 編碼規範,並結合具體示例,幫助你在實際開發中應用這些規範。爲什麼需要編碼規範?———-編碼規範不僅僅是 “如何寫代碼” 的指導方針,它更是團隊協作的基石。遵守編碼規範可以:提高代碼的可讀性:一致的代碼風格使得 ⌘ Read more
在 Golang 中不要簡單的返回 err
相反, 添加相關的調試細節。有些人喜歡抱怨 Go 需要編寫大量的 “ iferr!=nil{returnerr}” 代碼塊。這些人並沒有真正理解 Go 的錯誤處理機制。實際上, 他們抱怨的正是處理 Go 錯誤的完全錯誤方式: returnerr是一種反模式。讓我通過一些示例代碼來解釋我的意思: 一個用於配置 mTLS[1] 連接的輔助庫。(“雙向 TLS” 是向服務器證明客戶端身份的一種方式。)p ⌘ Read more
[譯]Go 中的循環依賴:如何解決這個問題
作爲一個 Golang 開發,你可能在項目中遇到過包的循環依賴問題。Golang 不允許循環依賴,如果檢測到代碼中存在這種情況,在編譯時就會拋出異常。本文會討論循環依賴是如何發生的以及如何處理。循環依賴假設我們有兩個包:p1 和 p2。當包 p1 依賴包 p2,包 p2 依賴包 p1 時,就會產生循環依賴。真實情況可能會更復雜一些。例如,包 p2 不直接依賴包 p1 而是依賴於包 p3,而 p3 ⌘ Read more
一致性哈希的基本概念及其 Golang 實現
在大規模分佈式系統的世界中,高效地管理和分配數據是一個關鍵挑戰。一種廣泛使用的技術是一致性哈希。這種方法確保數據在多個服務器之間均勻分佈,即使服務器的數量隨時間變化也是如此。本文將探討水平擴展、簡單哈希和一致性哈希的概念,並提供一個 Go 語言的示例實現。水平擴展在分佈式系統中,數據通常無法容納在單個服務器上。爲了處理大規模數據,數據被分佈在多臺機器上,這個過程稱爲水平擴展或分片。爲了確保可預測的 ⌘ Read more
探索 Go 語言數據庫查詢的終極指南:深入解析 GORM 的強大查詢功能
一、GORM 基本查詢1、基本查詢func (c UserController) UserSelect() { //1、查詢id=3的用戶 user := models.User{Id: 3} models.DB.Find(&user) //2、查詢所有數據 user := []models.User{} result := models.DB.Find(&user) //5 (統計 ⌘ Read more
深入理解 Go 語言 Gin 框架的請求處理機制
一、獲取 GET 請求 1、URL?參數 http://127.0.0.1:8080/user/search?username=snail&address=sh package mainimport ( “github.com/gin-gonic/gin” “net/http”)func main() { //Default返回一個默認的路由引擎 r := gin.Default ⌘ Read more
C 語言竟可以調用 Go 語言函數,這是如何實現的?
大家好,我是飛哥!今天和大家聊一個問題,一門語言是否可以在同一個進程內調用另外一門語言實現的函數?例如 C 語言是否可以調用 Golang 實現的函數?注意我說的是同進程內調用,跨進程的 IPC、PRC 之類的技術不算。直接拋出這個問題的答案,同進程跨語言調用是可行的。在各種語言設計時,爲了複用其它語言生態中積累下來的大量的代碼資產,都會實現跨語言調用的機制。例如在 Golang 中,實現了 cg ⌘ Read more
萬字長文:Go 語言現代命令行框架 Cobra 詳解
Cobra 是一個 Go 語言開發的命令行(CLI)框架,它提供了簡潔、靈活且強大的方式來創建命令行程序。它包含一個用於創建命令行程序的庫(Cobra 庫),以及一個用於快速生成基於 Cobra 庫的命令行程序工具(Cobra 命令)。Cobra 是由 Go 團隊成員 spf13 爲 Hugo 項目創建的,並已被許多流行的 Go 項目所採用,如 Kubernetes、Helm、Docker (di ⌘ Read more
gojq:現代 Golang JSON 查詢神器
隨着現代應用程序對數據處理和解析需求的不斷增加,JSON 已成爲數據交換的主要格式之一。在 Golang 生態系統中,解析和操作 JSON 數據的工具層出不窮,而 gojq 則是其中一款功能強大且易於使用的 JSON 查詢工具。本文將深入解析 gojq,展示其強大功能和實際應用場景,並通過豐富的示例幫助讀者全面掌握這款利器。什麼是 gojq?———gojq 是一個用 Go 語言編寫的 ⌘ Read more
探索併發安全的 Go 語言 Map - 深入理解 cmap
在 Go 語言中,內建的map類型並不是線程安全的。也就是說,如果您在沒有任何併發控制的狀態下,在多個 goroutine 中對同一個map同時進行讀寫操作,那麼會出現競態條件(race condition),進而導致不可預見的結果。針對這一問題,地裏特(lrita)開發了cmap(concurrent-map),一個用於提供併發訪問的線程安全的map類型,它可以讓您在 Go 語言中更加方便地進行 ⌘ Read more
go 語言是如何實現協程的
go語言的精華就在於協程的設計,只有理解協程的設計思想和工作機制,才能確保我們能夠完全的利用協程編寫強大的併發程序。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。寫過很多有意思的技術博客,也還在研究並輸出技術的路上 ⌘ Read more
聊聊 go 語言基於 epoll 的網絡併發實現
在之前的文章中我們已經介紹了 epoll 模型,而本文就從 go 語言源碼的角度來了解一下,go 語言是如何基於 epoll 模型完成高性能的網絡協程併發程序的。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。 ⌘ Read more
這次用 Go 語言實現的多協程文件上傳,效果很明顯
多協程文件上傳是指利用多線程或多協程技術,同時上傳一個或多個文件,以提高上傳效率和速度。通過將文件分塊,每個塊由單獨的協程處理上傳,可以有效減少總上傳時間。Go 語言通過 goroutine 實現多協程文件上傳。多協程文件上傳的基本流程文件分塊:將大文件分成多個小塊,以便多個協程可以同時處理不同的塊。 上傳塊:每個協程負責上傳一個或多個塊。 合併塊:在服務器端接收到所有塊後,將其合併爲 ⌘ Read more
Golang:使用 bcrypt 實現密碼加密和和校驗
bcrypt 可以用於數據庫中的用戶密碼保存,相比 md5 而言更加的安全可靠文檔https://pkg.go.dev/golang.org/x/crypto/bcrypt 文檔上給出了標準文檔,這個庫是下面這個文件描述的算法 golang 實現:https://www.usenix.org/legacy/event/usenix99/provos/provos.pdf 安裝go ge ⌘ Read more
xgo: 一款新鮮出爐的 Go 代碼測試利器
大家好,我是江湖十年。我曾經寫過一篇文章《測試代碼終極解決方案 Monkey Patching》,裏面介紹了 Go 語言中的猴子補丁方案。如今,時隔數月我又發現了一款新的工具可以實現 Monkey Patching,本文將帶大家一起嚐鮮下這款新的測試工具表現如何。簡介簡單一句話介紹 xgo:它是一款強大的的 Go 測試工具集,功能包括 Trap、Mock、Trace、增量覆蓋率。當然,開發中最常用 ⌘ Read more
使用 Go 語言實現 pping
大家好,我是鳥窩。在前一篇 pping: 被動式 ping,計算網絡時延中,我給大家介紹了 pping 這個工具的原理和使用方法。這篇文章中,我將使用 Go 語言實現 pping 工具。通過這篇文章,你將瞭解到:如何使用 gopacket 來捕獲和解析網絡數據包 如何設置捕獲時長和過濾捕獲的數據包 如何在 CGO 下靜態編譯庫,如 libpcap 瞭解 TCP/IP 協議棧的基本 ⌘ Read more
go3d:Go 語言遊戲方向的高性能 2D-3D 數學庫
在面向性能的編程世界中,go3d是爲 Go 語言提供的一款 2D/3D 數學庫,致力於提高圖形計算的效率與速度。適用於那些需要進行向量、矩陣等數學計算以實現圖形處理的應用程序,go3d提供了一套豐富的 API,以支持高效的數學運算。下面,我們將深入瞭解這個庫的主要特性、結構和使用方式,以及如何在項目中有效利用它。主要特性—-高性能設計:go3d庫主要關注於性能,通過優化算法和數據結構來減少計算 ⌘ Read more
Go Gio:用 Go 語言編寫跨平臺即時模式 GUI 的庫
在構建現代應用程序的過程中,不同平臺間的兼容性是一個不容忽視的挑戰。Go Gio 是一個用 Go 編程語言開發的庫,它致力於簡化跨平臺 GUI(Graphical User Interface,圖形用戶界面) 的構建工作,提供一種所謂的 “即時” (Immediate Mode) 編程模型。這種模型與傳統的 “保留模式” (Retained Mode) GUI 庫,例如 GTK+ 或 Qt,有所不 ⌘ Read more
Go 項目開發中如何讀取應用配置?
幾乎所有的後端服務都需要一些配置項來配置我們的服務,一些小型的項目,配置不是很多,可以選擇只通過命令行參數來傳遞配置,但是大型項目配置很多,通過命令行參數傳遞就變的很麻煩,不好維護,標準的解決方案是將這些配置信息保存在配置文件中,由程序啓動時加載和解析。所以對於一個稍微大型點的系統,配置文件加載和解析就是一個剛需。Go 生態中有很多包可以加載並解析配置,目前最受歡迎的是 Viper 包。Viper ⌘ Read more
Cloudflare 最佳實踐:如何通過 Go PGO 回收 CPU
Golang 1.20 在 go 編譯器引入了對配置文件引導優化 (PGO) 的支持。這允許指導編譯器根據系統的真實行爲引入優化。在 Cloudflare 的可觀察性團隊中,我們維護着一些基於 Go 的服務,這些服務在全球範圍內使用數千個內核,因此,即使宣傳的節省 2-7%,也能大幅減少我們的 CPU 佔用空間,而且實際上是免費的。這將減少我們內部服務的 CPU 使用率,釋放這些資源來滿足客戶請求 ⌘ Read more
Today’s project: Put 2 failing hard drives in RAID 0 and boot from it. What could go wrong?
如何構建現代化的 Go 命令行工具?
在 Go 項目開發中,我們需要編寫 main 函數,並編譯成爲二進制文件,部署啓動服務。有多種方式可以開發一個 main 函數。例如你可以手擼一個 main 函數,並在 main 函數中處理命令行參數,配置文件解析,應用初始化等操作。如下所示:package mainimport ( ”flag” ”fmt”)func main() { // 解析命令行參數 option1 := flag.Str ⌘ Read more
用 Go 實現一個無界資源池
寫在文章開頭——我們希望通過 go 語言實現一個簡單的資源池,而這個資源池的資源包括但不限於:數據庫連接池 線程池 協程池 網絡連接池 只要這些資源實現我們指定的關閉方法,則都可以通過我們封裝的資源池進行統一管理,需要簡單說明一下這個資源池的要求:需要用戶指定資源以及資源的創建方法。 當協程通過Acquire方法獲取資源時,若發現當前池中有資源可以分配則直接返 ⌘ Read more
GitHub 9-8k 的 Go 語言 2D 遊戲引擎 ebiten
前言–hi,大家好,這裏是白澤。今天給大家分享一個 GitHub 🌟9.8k 的 Go 語言 2D 遊戲引擎。https://github.com/hajimehoshi/ebiten引擎的貢獻者依舊在積極維護,是一個兼具學習 & 娛樂的項目!爲此我也用這個引擎寫了一個生存遊戲: avoid-the-enemies【如下圖】:https://github.com/BaiZe1998/avoid- ⌘ Read more
Go 通過 ETCD 實現應用選主
原理Go 服務通過 ETCD client 實現有狀態服務的選主,A、B 兩個服務通過生成相同前綴的 key,並且把自己的 IP 值上傳給 ETCD,由於多個服務間會同時上傳,所以按照相同前綴去獲取創建的 key-value,然後通過時間進行排序,最早創建的則成爲 master。如果成爲 master 的服務一直在線的話,會對 key-value 進行 續約, 當 master 下線不能正常續約的 ⌘ Read more
Go 通道的高級玩法
大家好!我是 lincyang。在之前的討論中,我們已經探索了 Go 語言中通道(channel)的基本使用和核心概念。今天,我們將深入探討一些更高級的通道操作技巧,特別是單向通道的使用,以及如何通過它們提高代碼的安全性和模塊性。單向通道的介紹在 Go 中,通道通常是雙向的,意味着它們既可以發送數據也可以接收數據。然而,在某些情況下,限制通道只發送或只接收可以提高程序的可讀性和運行時安全。這就是單 ⌘ Read more
How to Factory Reset Mac (MacOS Sonoma & Ventura)
If you are going to sell, return, or give away a Mac, you almost certainly want to factory reset the computer first. Performing a factory reset on a Mac will erase all data on the Mac, and return it to a clean slate as if the computer were brand new, without any data or personal … Read More ⌘ Read more
Go 如何編寫出可測試的代碼
之前寫了幾篇文章,介紹在 Go 中如何編寫測試代碼,以及如何解決被測試代碼中的外部依賴問題。但其實在編寫測試代碼之前,還有一個很重要的點,容易被忽略,就是什麼樣的代碼是可測試的代碼?爲了更方便的編寫測試,我們在編碼階段就應該要考慮到,自己寫出來的代碼是否能夠被測試。本文就來聊一聊在 Go 中如何寫出可測試的代碼。本文不講理論,只講我在實際開發過程中的經驗和思考,使用幾個實際的案例,來演示怎樣從根上 ⌘ Read more
使用 OpenTelemetry 實現 Golang 服務的可觀測系統
這篇文章中我們會討論可觀測性概念,並瞭解了有關 OpenTelemetry 的一些細節,然後會在 Golang 服務中對接 OpenTelemetry 實現分佈式系統可觀測性。Test Project我們將使用 Go 1.22 開發我們的測試服務。我們將構建一個 API,返回服務的名稱及其版本。我們將把我們的項目分成兩個簡單的文件(main.go 和 info.go)。// file: main. ⌘ Read more
Go 項目中使用 Base64Captcha 快速實現網站的驗證碼功能,內置多種類型的驗證碼
在當今世界,網站的安全性變得越來越重要。驗證碼作爲一種簡單而有效的驗證手段,已經被廣泛應用於各種在線平臺。Base64Captcha 是一個開源的 Go 語言庫,它提供了一個簡單、靈活的方式來生成多種形式的驗證碼,包括數字、字母、數字字母組合、算術式、音頻等形式的驗證碼。本文將深入講解 Base64Captcha 庫的使用方法和特點,幫助你在自己的項目中實現驗證碼功能。Base64Captcha ⌘ Read more
單元測試中如何解決 MySQL 存儲依賴問題
在編寫單元測試的過程中,如果被測試代碼有外部依賴,爲了便於測試,我們就要想辦法來解決這些外部依賴問題。在做 Web 開發時,MySQL 存儲就是一個非常常見的外部依賴,本文就來探討在 Go 語言中編寫單元測試時,如何解決 MySQL 存儲依賴。HTTP 服務程序示例假設我們有一個 HTTP 服務程序對外提供服務,代碼如下: main.gopackage mainimport ( ”encodin ⌘ Read more
單元測試中如何解決 Redis 存儲依賴問題
在編寫單元測試時,除了 MySQL 這個外部存儲依賴,Redis 應該是另一個最爲常見的外部存儲依賴了。我在《在 Go 語言單元測試中如何解決 MySQL 存儲依賴問題》一文中講解了如何解決 MySQL 外部依賴,本文就來講解下如何解決 Redis 外部依賴。登錄程序示例在 Web 開發中,登錄需求是一個較爲常見的功能。假設我們有一個 Login 函數,可以實現用戶登錄功能。它接收用戶手機號 + ⌘ Read more
如何使用 Go 語言優雅地實現接口限流
在衆多 Web 開發中,爲了保障服務器的穩定性,我們常常需要對接口的調用頻率做出限制。而 Go 語言的強大併發性能使其在此領域有出色的表現。本文將向你詳細展示如何利用 Go 語言實現接口限流。限流原理—-接口限流的目標是防止接口被過度調用,保護系統資源,包括 CPU、內存和帶寬等。限流通常應用於以下幾種場景:防止 DDoS 攻擊 控制非法爬蟲 公平分配系統資源 限流的實現方式 ⌘ Read more
單元測試中如何解決 HTTP 網絡依賴問題
在開發 Web 應用程序時,確保 HTTP 功能的正確性是至關重要的。然而,由於 Web 應用程序通常涉及到與外部依賴的交互,編寫 HTTP 請求和響應的有效測試變得具有挑戰性。在進行單元測試時,我們必須思考如何解決被測程序的外部依賴問題。因此,在 Go 語言中,我們需要找到一種可靠的方法來測試 HTTP 請求和響應。本文將探討在 Go 中進行 HTTP 應用測試時,如何解決應用程序的依賴問題,以 ⌘ Read more
Golang 實現枚舉的多種方式及最佳實踐
枚舉提供了一種表示一組命名常量的方式。雖然 Go 語言沒有內置的枚舉類型,但開發者可以通過常量 / 自定義類型來模擬類似枚舉的行爲。枚舉在編程語言中扮演着至關重要的角色,提供了一種簡潔而富有表現力的方式來定義一組命名常量。雖然像 Java 或 C# 這樣的語言提供了對枚舉的內置支持,但 Go 採用了不同的方法。在 Go 中,枚舉並不是一種原生的語言特性,但開發者有幾種技術可供使用,以實現類似的功能 ⌘ Read more
sqlx: 功能強大的數據庫訪問庫
sqlx[1] 是一個用於擴展標準庫 database/sql 的庫,它提供了一些額外的功能,使得在 Go 中使用 sql 更加方便。sqlx 的目標是保持 database/sql 的簡單性,同時提供更多的功能。sqlx 爲 Go 的標準 database/sql 庫提供了一組擴展。sqlx 中的 sql.Conn、sql.DB、sql.TX、sql.Stmt、sql.Rows、sql.Row ⌘ Read more
萬字長文——在 Go 中如何編寫測試代碼
在程序開發過程中,測試是非常重要的一環,甚至有一種開發模式叫 TDD(測試驅動開發),先編寫測試,再編寫功能代碼,通過測試來推動整個開發的進行,可見測試在開發中的重要程度。爲此,Go 語言提供了 testing 框架來方便我們編寫測試,本文將向大家介紹在 Go 中如何編寫測試代碼。測試分類在 Go 中,編寫的測試用例可以分爲四類:單元測試:測試函數名稱以 Test 開頭,如 TestXxx、Tes ⌘ Read more
Go FRP:快速反向代理助您穿越 NAT 或防火牆,輕鬆連接互聯網
在當前的互聯網架構中,NAT(網絡地址轉換)和防火牆是常見的網絡安全措施,它們爲內網提供了一層保護。然而,這同時也意味着在不進行特別配置的情況下,外部網絡無法直接訪問內網的服務。爲了解決這一問題,Go FRP(Fast Reverse Proxy)應運而生。它是一個快速的反向代理工具,可以幫助您將內網服務安全地暴露到外網,極大地簡化了穿越 NAT 或防火牆的過程。Go FRP 的工作原理—– ⌘ Read more
在 Go 語言中,這樣使用 Json 的
Encode將一個對象編碼成JSON數據,接受一個interface{}對象,返回[]byte和error:func Marshal(v interface{}) ([]byte, error)Marshal函數將會遞歸遍歷整個對象,依次按成員類型對這個對象進行編碼,類型轉換規則如下:bool類型 轉換爲JSON的Boolean 整數,浮點數等數值類型 轉換爲JSON的Number s ⌘ Read more
使用 Ollama 和 Go 基於文本嵌入模型實現文本向量化
基於 RAG + 大模型的應用已經成爲當前 AI 應用領域的一個熱門方向。RAG(Retrieval-Augmented Generation) 將檢索和生成兩個步驟相結合,利用外部知識庫來增強生成模型的能力 (如下圖來自網絡)。在 RAG 賦能的大模型應用中,關鍵的一步是將文本數據向量化後存儲在向量數據庫中 (如上圖的紅框),以實現快速的相似度搜索,從而檢索與輸入查詢相關的文本片段,再將檢索到的 ⌘ Read more
Go 未用代碼消除與可執行文件瘦身
在日常編寫 Go 代碼時,我們會編寫很多包,也會在編寫的包中引入了各種依賴包。在大型 Go 工程中,這些直接依賴和間接依賴的包數目可能會有幾十個甚至上百個。依賴包有大有小,但通常我們不會使用到依賴包中的所有導出函數或類型方法。這時 Go 初學者就會有一個疑問:這些直接依賴包和間接依賴包中的所有代碼是否會進入到最終的可執行文件中呢?即便我們只是使用了某個依賴包中的一個導出函數。這裏先給出結論:不會! ⌘ Read more
SeaweedFS:基於 Go 語言實現次世代的分佈式存儲解決方案
在如今這個數據爆炸的時代,企業和開發者迫切地需要一個高效可靠的分佈式存儲系統來管理他們海量的數據。SeaweedFS 以其出色的性能和靈活性,成爲了存儲行業的明星產品。在本文中,我們將深入剖析 SeaweedFS 的核心功能、架構細節,並通過示例來展現它在實際中的應用。SeaweedFS 概覽————SeaweedFS 是一款開源的分佈式存儲系統,專門設計來處理海量的文件以及數據。 ⌘ Read more
用 Go 語言做了一個分佈式限流器, 看看實現的方法與步驟
項目中需要對 api 的接口進行限流,但是麻煩的是,api 可能有多個節點,傳統的本地限流無法處理這個問題。限流的算法有很多,比如計數器法,漏斗法,令牌桶法,等等。各有利弊,相關博文網上很多,這裏不再贅述。項目的要求主要有以下幾點:支持本地 / 分佈式限流,接口統一 支持多種限流算法的切換 方便配置,配置方式不確定 go 語言不是很支持 OOP,我在實現的時候是按 Java 的思 ⌘ Read more
Go 命令行參數解析工具 pflag 使用
在使用 Go 進行開發的過程中,命令行參數解析是我們經常遇到的需求。儘管 Go 標準庫提供了 flag 包用於實現命令行參數解析,但只能滿足基本需要,不支持高級特性。於是 Go 社區中出現了一個叫 pflag 的第三方包,功能更加全面且足夠強大。在本文中,我們將學習並掌握如何使用 pflag。特點pflag 作爲 Go 內置 flag 包的替代品,具有如下特點:實現了 POSIX/GNU 風格的 ⌘ Read more
用 Golang 做一個永久阻塞,有哪些小技巧 ?
Go 的運行時的當前設計,假定程序員自己負責檢測何時終止一個 goroutine 以及何時終止該程序。可以通過調用 os.Exit 或從 main() 函數的返回來以正常方式終止程序。而有時候我們需要的是使程序阻塞在這一行。使用 sync.WaitGroup 一直等待直到 WaitGroup 等於 0package mainimport ”sync”func main() { var wg ⌘ Read more
Goose:Go 語言漸進式的數據庫遷移工具
數據庫遷移是軟件開發過程中重要的一部分,隨着業務的發展和需求的變化,數據庫結構經常需要做出調整。Goose 是一個出色的數據庫遷移工具,它通過 SQL 腳本和 Go 函數支持漸進式的數據庫變化。下面是一篇詳細的文章,它將深入介紹 Goose 的用法,並提供豐富的示例幫助你開始使用 Goose。Goose 簡介——–Goose 是一款能夠管理數據庫架構變更的工具,提供了一系列命令來幫助開發 ⌘ Read more
Go Heap Profile 怎麼了?
Go heap profile 是常常用來檢查內存泄露和內存佔用大問題的問題的手段,而且非常常用。而且,我們也經常創建兩個間隔較長的 heap profile, 獲取它們的差值來方便查看內存泄露: Hi, 使用多年的 go pprof 檢查內存泄漏的方法居然是錯的?! [1]今天,度廠的一位同學提出了一個很有意思的案例,讓我們對 heap profile 有了更深的理解。問題: heap prof ⌘ Read more
Go 語言實現輕量級全文檢索引擎
黎明破曉,我在陽光的照射下觀察到一個光鮮亮麗的開源項目——ZincSearch。這並不是一個大型的項目,但是其優雅而堅韌的特質讓我深深着迷。鑄就在 Go 語言的火爐中,ZincSearch 提供了一個輕量級但功能強大的全文索引搜索引擎,這讓我對其深感興趣。ZincSearch 誕生背景—————在講述 ZincSearch 之前,首先需要了解它的誕生背景。隨着互聯網技術的迅速發 ⌘ Read more
Go 語言實現開源優雅的跨平臺 USDT 收付中間件
Epusdt(全稱:Easy Payment Usdt)是一個由 Go 語言編寫的私有化部署 Usdt 支付中間件 (Trc20 網絡)。站長或開發者可以通過 Epusdt 提供的 http api 集成至任何系統,無需過多的配置,僅僅依賴 mysql 和 redis。通過它,可以實現 USDT 的在線支付和消息回調,均可在優雅和瞬間完成。私有化搭建使得無需額外的手續費和簽約費用,Usdt 代幣直 ⌘ Read more
@bender@twtxt.net haha yeah. he’s never been free to roam the house when we are away, he’s either with us - or in his big crate in our bedroom (he’s not in there for long, just when he cannot be with us in the car etc). So it’s going to be damn nice to have a safe place for him outside. We fenced our garden in last year, he’s been there a lot when we are home, he loves it a lot (especially during winter). But we cannot have him there when we’re not home. But with the new dog yard thing - he can stay there without me worrying.
# follow = dbucklin@www.davebucklin.com https://www.davebucklin.com/twtxt.txt?nick=dbucklin
I fixed it by adding (?<!\S)
to the regex filter. But what is going on with the ?nick=dbucklin
anyhow?
How to Hide iPhone Keyboard When It’s Covering Buttons & Won’t Go Away
Some iPhone users may find that the onscreen keyboard occasionally gets stuck on screen and covers buttons or other elements on the the screen, preventing interaction with the iPhone and preventing the dismissal of the iPhone keyboard. This can happen for a variety of reasons, whether in Messages, Whatsapp, Instagram, FaceBook, Mail, and basically any … [Read More](https://osxdaily.com/2024/05/01/fix-iphone … ⌘ Read more
Is this “flat UI” madness ever going to end? I’m beginning to lose hope.
@adi@twtxt.net I kinda bounced off learning go properly a few years back. This little toy would be a good thing to try again on, now that you mention it. Maybe.
利用 Go 操控 Etcd:構建強一致性系統的祕訣
etcd 是一個開源的、高可用的分佈式鍵值(key-value)存儲系統,它主要用來共享配置和服務發現。etcd 由 CoreOS 團隊開發,是以 Go 語言編寫的。etcd 採用了 Raft 協議來處理日誌複製以提供強一致性和高可用性,它成爲很多分佈式系統和雲原生技術(如 Kubernetes)中的基礎組件。etcd 的核心特性包括:簡潔的鍵值存儲:etcd 提供 HTTP/JSON API,允 ⌘ Read more
GitHub Copilot Workspace: Welcome to the Copilot-native developer environment
We’re redefining the developer environment with GitHub Copilot Workspace - where any developer can go from idea, to code, to software all in natural language.
The post GitHub Copilot Workspace: Welcome to the Copilot-native developer environment appeared first on The GitHub Blog. ⌘ Read more
使用 Makefile 輕鬆管理 Go 項目:提高開發效率的利器
一、介紹1、make 介紹make是一個構建自動化工具,會在當前目錄下尋找Makefile或makefile文件 如果存在相應的文件,它就會依據其中定義好的規則完成構建任務 2、Makefile 介紹 藉助Makefile我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的參數,可以極大簡化項目編譯過程。 我們可以把Makefile簡單理解爲它定義了一個項目文件的編譯規則。 ⌘ Read more
Ollama:本地大模型運行指南
本文作者爲 360 奇舞團前端開發工程師Ollama 簡介———Ollama 是一個基於 Go 語言開發的可以本地運行大模型的開源框架。官網:https://ollama.com/GitHub 地址:https://github.com/ollama/ollamaOllama 安裝———下載安裝 Ollama在 Ollama 官網根據操作系統類型選擇對應的安裝包,這裏選 ⌘ Read more
Google 孵化了 3 個 Go 安全庫,推薦使用!
大家好,我是煎魚。Google 作爲一家用戶體量很大的企業,有非常多的產品,經常會被黑客攻擊或被拿來練手。因此其設計的產品、編程語言、工具庫等都會要求考慮安全性相關的內容。例如:各種供應鏈攻擊、CWE 等安全的查缺補漏等。我們作爲用戶(使用者),可以 “白嫖” 這些功能實現。直接複用在自家的業務上就可以了。這樣每年在護網上都能省不少勁。三個 Go 安全庫———本次 Google 輸出了 ⌘ Read more
Golang 高效的切片拼接和 Go1-22 中新的拼接方法
在 Go 中,切片拼接是一種常見操作,但如果處理不當,可能會導致性能問題或意外的副作用。本文將詳細介紹幾種切片拼接的高效方法,討論它們的優缺點以及適當的使用場景。 基本的方法和其限制使用 append 函數最直接的方法是使用 append 函數,它將一個切片的元素添加到另一個切片的末尾。slice1 := []int{1, 2}slice2 := []int{3, 4}result := app ⌘ Read more
Go 語言將 PDF 轉爲 Word ,代碼怎麼實現?
將 PDF 轉換爲 Word 這是一個很常見的功能了,用 Go 語言實現,可以通過以下步驟完成:1 安裝 PDF 轉換工具庫:首先需要使用 Go 語言中的 PDF 轉換庫,比如 pdftoword 或 pdfcpu。你可以使用 Go 的包管理工具(如 go get)來安裝這些庫。2 導入依賴庫:在 Go 項目中導入你選擇的 PDF 轉換庫,並確保正確地導入了所有需要的依賴項。3 加載 PDF 文件 ⌘ Read more
gnet:基於 Go 語言的高性能網絡框架
gnet 是一個基於 Go 語言的事件驅動型網絡框架,其設計宗旨是實現高性能和輕量級。gnet 在底層採用了 epoll 和 kqueue 機制,相較於 Go 語言標準庫 net 在特定場景下有着更好的性能和更低的內存消耗。雖然 gnet 並非旨在取代 Go 語言的 net 庫,但它提供了另一種在 Go 生態系統中構建性能敏感型網絡服務的選擇。通過實現應用層的協議(如 HTTP、RPC、WebSo ⌘ Read more
go-money 實現貨幣運算的金標準
在進行金融領域的軟件開發時,貨幣值的精確表示和操作至關重要。由於浮點數帶來的精度問題,傳統的處理方式經常導致數值上的細微誤差。針對這一問題,go-money包提供了基於 Go 語言的解決方案,實現了 Fowler 的貨幣模式。本文將深入解析go-money包,演示其具體的使用方式,並通過豐富的示例讓您掌握如何在 Go 項目中實現精確的貨幣計算。起步:安裝 go-money————- ⌘ Read more
Go 1-22 的新增功能系列之一:cmp-Or
截至撰寫本文時,Go 1.22 已經發布幾個月了。早就該結束我爲 1.22 所做的工作的系列了。抱歉耽擱了這麼久,我最近忙於生活事務。如果您錯過了我關於 reflect.TypeFor(https://blog.carlana.net/post/2024/golang-reflect-type-for/) 和 slices.Concat(https://blog.carlana.net/post/ ⌘ Read more
使用 Go 語言中的 Buffer 實現高性能處理字節和字符串
在 Go 語言標準庫中,bytes包提供了對 byte slice ([]byte) 的便捷操作,其中Buffer是一個實現了io.Reader和io.Writer接口的可變大小的字節緩衝。我們通常使用Buffer來讀寫數據、處理字符串和字節的過程中實現高性能的操作。Buffer 的使用場景————Buffer在以下場景中特別有用:當需要一個字節緩衝時 進行字符串的高效拼接 ⌘ Read more
Golang 異步編程方式和技巧
Golang 基於多線程、協程實現,與生俱來適合異步編程,當我們遇到那種需要批量處理且耗時的操作時,傳統的線性執行就顯得喫力,這時就會想到異步並行處理。下面介紹一些異步編程方式和技巧。作者:zvalhu一、使用方式1.1、最簡單的最常用的方式:使用 go 關鍵詞func main() { go func() { fmt.Println(“hello world1”) }() go func( ⌘ Read more
從零到生產:Go 在 Google 的歷程 [譯]
2007 年 Go 誕生於 Google,2009 年 Google 正式對外宣佈了 Go 語言的開源!時至今日,距離 Go 開源已經過去了近 15 個年頭了 [1]!Go 在 Google 公司內部究竟是怎樣的一個狀態呢?前 Google 員工 Yves Junqueira 近期撰文從其個人所見所聞談了 Go 在 Google 的歷程 [2]!這裏簡單翻譯,供大家參考! 最近,Jeremy Ma ⌘ Read more
How to Uninstall Apps on MacOS Sonoma & Ventura via System Settings
Uninstalling and removing apps is a necessary task on any computer, and the Mac is no exception. One of the benefits of MacOS is that it makes uninstalling applications pretty easy, and there are several ways to go about participating in the removal of apps from your Mac computer. One of the handiest ways to … Read More ⌘ Read more
How to Uninstall Apps on MacOS Sonoma & Ventura via System Settings
Uninstalling and removing apps is a necessary task on any computer, and the Mac is no exception. One of the benefits of MacOS is that it makes uninstalling applications pretty easy, and there are several ways to go about participating in the removal of apps from your Mac computer. One of the handiest ways to … Read More ⌘ Read more
Go 語言實現 dll 惡意劫持轉發
dll 轉發概述————dll 轉發: 攻擊者使用惡意 dll 替換原始 dll,重命名原始 dll 並通過惡意 dll 將原先的功能轉發至原始 dll。該惡意 dll 一般用來專門執行攻擊者希望攔截或修改的功能,同時將所有其他功能轉發至原始 dll一般可與 dll 劫持共同使用。dll 搜索順序首先我們來看一下 Windows 系統中 dll 的搜索順序 上圖中攻擊者可以控制的 ⌘ Read more
基於 go 實現 redis 之主幹框架
0 前言本着學習和實踐的目的,從本期開始,我將和大家一起走進一個新的專題—— 【基於 go 實現 redis】 .該專題圍繞着我的一個開源項目——goredis 展開. 由於個人水平有限,如有不到位之處,歡迎批評指正:https://github.com/xiaoxuxiansheng/goredis本系列計劃分爲四篇內容:• 基於 go 實現 redis 之主幹框架(本篇): 在宏觀視角下縱覽 ⌘ Read more
訪問 Golang 私有函數、方法、類型和變量
本文譯自 Yarden Laifenfeld 的 Accessing Private Functions, Methods, Types and Variables in Go https://medium.com/@yardenlaif/accessing-private-functions-methods-types-and-variables-in-go-951acccc05a6你 ⌘ Read more
Go 語言使用 Watermill 構建高性能事件流處理
在今天的數據驅動世界中,異步通信模式對實現高效的數據處理和服務間通信至關重要。Go 語言因其簡潔的語法、強大的併發支持而成爲處理高併發事件流的理想選擇。在衆多 Go 語言庫中,Watermill 是一個值得關注的事件流處理庫。本文將深入探討 Watermill 的內部機制、優點以及如何在 Go 項目中有效地利用它來處理異步請求。Watermill 簡介————Watermill 是 ⌘ Read more
Go 語言是 如何實現 HTTP 代理 和 反向代理
代理的核心功能可以用一句話概括:接受客戶端的請求,轉發到後端服務器,獲得應答之後返回給客戶端。代理的功能有很多,事實上整個互聯網到處都充斥着代理服務器。如果所有的 HTTP 訪問都是客戶端和服務器端直接進行的話,我們的網絡不僅會變得緩慢,而且性能會大打折扣。代理服務器根據不同的配置和使用,可能會有不同的功能,這些功能主要包括:內容過濾:代理可以根據一定的規則限制某些請求的連接。比如有些公司會設置內 ⌘ Read more
快速優化 Golang 代碼的幾個小 Tips
本文將提供一些代碼優化指南,希望能夠幫助開發者增強其程序性能並簡化開發,實現更高效和健壯的編碼,解鎖 Golang 應用程序的潛力。 下面是我從自己平時開發常用的實用庫中隨機選擇的一些有用且通用的代碼片段。Tracking Execution Time如果你想要跟蹤 Go 中函數的執行時間,有一個簡單而高效的技巧,只需使用 defer 關鍵字即可實現一行代碼。你只需要一個 TrackTime 函數 ⌘ Read more
golang 開發: goroutine 在項目中的使用姿勢
很多初級的 Gopher 在學習了 goroutine 之後,在項目中其實使用率不高,尤其一些跨語言過來的人,對併發編程理解不深入,可能很多人只知道 go func(), 或者掌控不夠,謹慎一些,儘量少使用或者不使用,用的話就是 go func(),主要列一下我們這邊的主要使用方法。goroutine 在項目中的使用方法看一下樣例代碼,實際上,我們生產環境中就是這麼使用的。package lo ⌘ Read more
Go 的線程池和協程池,看這一篇你就懂了
Golang 線程池與協程池是併發編程中的重要概念,它們可以幫助我們更高效地管理併發任務,提高程序的性能和資源利用率。下面我將詳細解釋這兩個概念,包括它們的實現方式、使用場景以及原理。線程池(Thread Pool)概念:線程池是一種併發設計模式,用於管理線程的創建、銷燬和複用。線程池維護着多個線程,這些線程可以被用來執行任務,任務完成後線程並不立即銷燬,而是返回線程池中等待下一個任務。這樣可以減 ⌘ Read more
Go:常見的幾種設計模式解析
在軟件工程中,設計模式是解決常見問題的一套經典解決方案。Go 語言,作爲一種強調簡潔和高效的編程語言,其設計模式同樣體現了這些理念。本文將探討 Go 語言中常見的幾種設計模式,包括單例模式、工廠模式、策略模式、觀察者模式,並用 UML 創建概念模型來直觀展示這些設計模式的結構。1. 單例模式單例模式確保一個類只有一個實例,並提供一個全局訪問點。在 Go 中,使用私有結構體和公有的獲取實例函數是實現 ⌘ Read more
探祕 Go Playground 服務
什麼是 Playground? Playground 是一個 Web 服務,允許任何擁有網絡瀏覽器的人編寫 Go 代碼,可以立即進行編譯、鏈接並在服務器上運行。這是給好奇的程序員一個在安裝之前嘗試 Go 語言的機會,並給有經驗的 Go 用戶一個方便的實驗場所。當然,在 Playground 上運行的程序種類有一些限制,我們不能簡單地接受任意代碼並在我們的服務器上無限制的運行它。這些程序是在一個刪 ⌘ Read more
深入 Go interface: Duck Typing 和多態
Duck Typing鴨子類型(Duck Typing)是一種編程概念,關鍵在於根據對象的行爲來確定其類型。通常的解釋是通過一個巧妙的例子:根據對象的行爲來判斷它是否是一隻鴨子。如果它游泳像鴨子、嘎嘎叫像鴨子,那麼它就可以被認爲是一隻鴨子。動態語言如 Python 和 JavaScript 自然支持這種特性,但與靜態語言相比,動態語言缺乏重要的類型檢查。Go 語言的接口設計與鴨子類型概念密切相關, ⌘ Read more
9 個必備的 Go 語言 GitHub 庫
使用這些不可或缺的 GitHub 庫構建健壯高效的 Go 應用程序———————————在充滿活力的 Golang 開發生態系統中,GitHub 是一個寶庫,提供了許多寶貴的庫和包,這些庫和包簡化了開發工作流程,提高了生產效率,並促進了代碼重用。從 Web 框架到數據庫驅動,GitHub 倉庫託管了大量必備的 Go 庫,使開發人員能夠構建健壯且可擴展的應 ⌘ Read more
純 Go 實現的 MySQL 引擎——go-mysql-server
go-mysql-server 是一個用 Go 編寫的 MySQL 兼容的查詢引擎。它不僅是一個解析器,還是一個服務器和查詢執行引擎,完全使用 Go 語言編寫。與 Dolt 一樣,它的目標是成爲 MySQL 的 100% 兼容的替代品。go-mysql-server 具有以下兩個主要用途:作爲 Golang 測試環境中 MySQL 的替代品,使用內置的內存數據庫實現。 通過實現一些接口, ⌘ Read more
又一個 Linux 桌面?用 Go 寫的 FyneDesk
FyneDesk 是一個易於使用的 Linux/Unix 桌面環境,遵循材料設計原則。它使用 Fyne 工具包構建,旨在易於使用和開發。我們使用 Go 語言,並歡迎任何對項目的貢獻或反饋。爲了完整的桌面體驗,您還需要安裝以下外部工具:arandr 用於修改顯示設置 xbacklight 或 brightnessctl 用於調整筆記本電腦的亮度 目前使用 connman-gtk 來配置 ⌘ Read more
Go 居然克隆了 Python 的 Requests 庫!
在現代軟件開發中,HTTP 請求處理是一個重要環節。Grequests 是 Go 語言中一個高效的 HTTP 請求庫,靈感來源於 Python 中廣受歡迎的 Requests 庫。本文將深入講解 Grequests 庫在 Go 語言中的實現和使用,幫助開發者快速掌握其強大功能。功能概述—-Grequests 庫爲 Go 開發者提供了一系列的便利功能,使得發送 HTTP 請求變得簡單高效。下面就 ⌘ Read more
Golang: 打造一個交互式命令行
Go 非常適合於構建命令行應用程序。我們構建了一個名爲 Dolt 的應用, 它是世界上第一個支持版本控制的 SQL 數據庫。我們爲處理 Dolt 的所有子命令和參數編寫了自己的命令行解析器, 但也許我們不應該這樣做。現在有很多很棒的工具可以替代我們自己編寫的解析器, 如果我們今天開始這個項目, 我們可能會選擇使用它們:spf13/cobra 提供了從簡單的文本命令格式生成代碼的強大支持, 並且可以 ⌘ Read more
Go 實現在線用戶消息推送實戰!
前言–今天老闆又給下了一個需求,在線用戶的消息推送,這個功能我相信 95% 的產品都有這個需求,比如下面的需求場景1: 運營給在線的用戶推送一些活動或者文案或者公告2: 實時監控和通知:在監控系統中,可以使用消息推送來實時向操作員發送系統警報和通知。例如,當系統出現異常或達到某個閾值時,服務器可以向操作員發送警報消息。3: 社交網絡和新聞資訊:使用消息推送來通知用戶有新的消息、新的粉絲或者新的內 ⌘ Read more
Go 通過 grpc-protobuf 實現高性能用戶服務實戰,從 0 到 1 超級詳細流程!!
基礎知識準備在在代碼實戰 gRPC 之前,我們需要了解一些基礎知識:RPC(Remote Procedure Call):遠程過程調用,是一種通信協議,允許應用程序在不同的計算機上請求服務而不需要了解底層網絡細節。 gRPC:gRPC 是一種高性能、開源的遠程過程調用(RPC)框架,由 Google 開發,並基於 HTTP/2、Protocol Buffers 等技術實現。 Proto ⌘ Read more
Today is US tax. Pay your high taxes today or go to jail. Your choice.
用 Go 語言 - Redis 實現分佈式鎖,我還是第一次
一 爲什麼需要分佈式鎖 共享資源訪問控制: 當多個節點需要同時訪問共享資源時,爲了避免併發寫入導致數據不一致,需要使用分佈式鎖確保同時只有一個節點可以寫入或修改共享資源。避免重複執行: 在分佈式系統中,某些操作可能需要在整個系統中只執行一次,比如定時任務、數據初始化等。爲了避免多個節點同時執行這些操作,需要使用分佈式鎖來確保只有一個節點可以執行。任務協調: 在分佈式任務隊列中,多個節點競爭執行任 ⌘ Read more
Go 一行代碼測量函數的執行時間
Golang Tips 是翻譯的 Phuong Le @func25[1] 陸陸續續的發表的推文,目前已經發表 70 + 了。我徵得 Phuong Le 的同意後,會逐步把這些推翻翻譯過來,發佈到公衆號上。因爲是推文,可能原作者的內容比較簡單,比如第一個 tip 就一張圖片,我會相應的進行擴充,豐富其內容。 後續也會在 github 建立一個項目,大家都可以參與進行翻譯。我們可以通過 defe ⌘ Read more
專爲 Go 語言設計的函數式編程庫 fp-go
背景介紹在編程領域中,函數式編程是一種編程範式,它將計算視爲函數的評估,避免改變狀態和可變數據。然而,Go 語言並沒有內建對函數式編程的支持,這使得在 Go 語言中實現函數式編程變得困難。今天要給大家推薦一個 GitHub 開源項目 IBM/fp-go,該項目在 GitHub 有超過 1.1k Star,用一句話介紹該項目就是:“functional programming library for ⌘ Read more
Otter:探索 Go 語言中高效無鎖緩存庫的實現與應用
在當今軟件開發的背景下,性能優化已經成爲了一個不可或缺的部分。尤其是在緩存技術這一塊,優秀的緩存機制不僅能大幅提高應用的響應速度,更能夠有效減輕後端系統的壓力。今天,我們要深入探究的是 Otter——這是一個針對 Go 語言設計的高性能無鎖緩存庫。接下來,我們將詳細介紹 Otter 的設計原理、特性與使用方法,並通過實例演示如何在 Go 項目中集成 Otter。Otter 緩存庫概述——- ⌘ Read more
使用 gofn 和 pipe 助力 Golang 函數式編程
今天要介紹的是兩個在函數式編程裏面很有用的 package,通過使用 gofn[1] 和 pipe[2] 庫讓 Go 的函數式編程更強大。Go 的函數式編程由於本質上,Go 並不像 Haskell 或 Erlang 那樣是純函數式語言,但這並不意味着我們不能應用函數式編程的概念來編寫簡潔、可讀和高效的代碼。這正是 gofn 和 pipe 發揮作用的地方。gofn 和 pipegofn:一個在 Go ⌘ Read more