Searching txt.sour.is

Twts matching #go
Sort by: Newest, Oldest, Most Relevant

用 go 語言實現一個有界協程池
寫在文章開頭——本篇文章算是對go語言系列的一個收尾,通過 go 語言實現一個實現一個簡單的有界協程池。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。寫過很多有意思的技術博客,也還在研究並輸出技術的路上,希 ⌘ Read more

⤋ Read More

全面解析 Go 語言 Channel:面試必備知識點
一、channel 的整體結構圖1、channel 結構圖 channel 本質是一個 hchan 這個結構體 type hchan struct { buf unsafe.Pointer // points to an array of dataqsiz elements sendx uint // send index recvx uint ⌘ Read more

⤋ Read More

Go 實驗室:image 圖像處理就用它
短腿子猿的 Go 實驗室,Golang 官方提供了很多 package 來幫助大家提高開發的效率,但是由於函數太多,經常會記不住,這裏開了一個專題來分享官方 package,努力做到每週一更 Golang 中的 image 包提供了基本的圖像類型、顏色模型、以及用於處理圖像的各種函數和接口。以下是一些常用的函數和接口,以及相應的示例。常用類型與接口——-image.Image 接口這是 ⌘ Read more

⤋ Read More

Go 併發編程精粹:掌握通道(channels)的藝術
在併發編程的多任務世界中,Go 語言以其強大的併發特性而獨樹一幟。通道(channels),作爲 Go 併發模型中的核心概念,是連接不同 goroutines 的橋樑,確保了數據在它們之間的流暢傳遞。如果你對 goroutines 已經有所瞭解,那麼現在是深入探索通道的絕佳時機。併發編程:Go 語言的殺手鐧————–併發性是現代編程中的關鍵特性,它允許程序在同一時間內執行多個任務 ⌘ Read more

⤋ Read More

Golang 插件系統實現
插件可以在解耦的基礎上靈活擴展應用功能,本文介紹瞭如何基於 Golang 標準庫實現插件功能,幫助我們構建更靈活可擴展的應用。原文: Plugins with Go[1]什麼是插件簡單來說,插件就是可以被其他軟件加載的軟件,通常用於擴展應用程序的功能和外觀,插件的開發人員甚至可以不直接修改基礎應用程序。你很可能在日常生活中使用過插件,也許用的是其他名稱,如擴展 (extensions) 或附加 ⌘ Read more

⤋ Read More

掌握 Go 語言 Interface:面試高頻考點詳解
一、interface1、interface 作用接口是 Go 語言的重要組成部分,它在 Go 語言中通過一組方法指定了一個對象的行爲 接口 interface 的引入能夠讓我們在 Go 語言更好地組織並寫出易於測試的代碼 golang 中的接口分爲帶方法的接口和空接口 iface: 表示帶方法的接口 eface:表示空接口 2、eface 空接口 空接口 efac ⌘ Read more

⤋ Read More

Go 語言主流 ORM 框架對比:GORM vs- Ent
GORM 和 Ent 是 Go 語言中使用廣泛的兩種 ORM(對象關係映射)框架。它們都有助於將數據庫操作從底層 SQL 抽象出來,簡化數據庫交互,但它們的設計理念和使用方式有顯著的不同。本文將詳細介紹 GORM 和 Ent 的不同特點、使用示例,並比較它們在不同場景下的優劣。GORM 簡介——-GORM 是一個易於使用的 ORM 庫,旨在提供簡單、乾淨的 API。它通過反射機制動態處理數 ⌘ Read more

⤋ Read More

GRequests: 讓 HTTP 服務人類
熟悉我的讀者朋友們都知道,我早期是寫 Python 的,現在主力語言是 Go。開始接觸 Go 語言以後,我發現 Go 自帶的 net/http 請求庫不夠好用,好在我沒用 Go 寫過一行爬蟲代碼,平時 net/http 庫用的也就比較少,不是每天都用,也就忍了。最近我在網上衝浪時,無意間發現了 grequests 這個庫,靈感來源於 Python 生態中大名鼎鼎的 requests 庫。顧名思義, ⌘ Read more

⤋ Read More

Update multiple Kubernetes objects/configmaps in one go!
Community post originally published on dev.to by Sunny Bhambhani There may be cases wherein we just need to update a Kubernetes configmap or any other Kubernetes object based on our requirements. And let’s say it’s just one or… ⌘ Read more

⤋ Read More

實現微服務註冊的高效利器:gRPC 與 Nacos 集成教程
一、golang gRPC 註冊 nacosgithub 地址 nacos-sdk-go(opens new window) nacos 官網 1、目錄結構 2、pb/person.protosyntax = “proto3”;option gopackage = “./person”;package pb;message Person { string name = 1; in ⌘ Read more

⤋ Read More

使用 Go Channel 構建可擴展的併發 worker pool
在本篇博文中,我們將深入探討如何在 Go 中構建一個可擴展的 Worker pool。該實現可有效地管理 Worker pool,以處理大量請求,同時根據負載動態調整 Worker 的數量。我們還會討論可能出現的問題以及如何避免它們。概覽要實現的 worker pool 應該具有以下功能:根據負載情況動態調整 worker 數量; 具備超時和重試機制處理接收到的請求; 能夠 Grace ⌘ Read more

⤋ Read More

Go 實現的一個 bitset,設計思想非常棒,值得參考收藏!
這兩日讀了一個實現二維碼生成的庫。其中的 bitset 設計得非常好,就摘抄記錄下來,與大家一起分享。bitset 實現一個可擴展的 bit 集合,可以添加 bit 和查看 bit。它在二維碼生成中,用來將編碼後的內容協助生成位圖,然後通過位圖進行繪製二維碼。二維碼的黑白格子正好用二進制 0 和 1 來表示。 下面開始詳細講解這個功能設計: 一、我們使用一個結構體來存儲 bit 序列。Bits ⌘ Read more

⤋ Read More

Go 語言學習筆記:深入理解匿名函數與閉包
一、引言—-在 Go 語言中,匿名函數與閉包是兩個重要的概念,它們增強了 Go 語言的表達力和功能性,使得代碼更加簡潔和強大。 本文將深入探討 Go 語言中的匿名函數與閉包,幫助讀者更好地理解和應用這兩個概念。匿名函數在 Go 語言中提供了一種靈活的方式來定義即用即拋的函數邏輯,減少了命名負擔並且可以直接在代碼中嵌入。閉包則允許匿名函數捕獲並持有其定義時作用域中的變量,使得函數具有狀態,這對於 ⌘ Read more

⤋ Read More

Go 線程同步
線程同步—-通常在 Go 語言中有兩種方法可以用來做線程同步sync.Cond channel channel 的很好理解,當我們從一個 channel 中接收數據的時候,如果裏面沒有數據,那我們直接就阻塞在那裏了;在這篇文章中就來看看怎麼使用 sync.Cond 完成同步sync.Cond———「定義結構體和方法」type BlueberryInt struct { ⌘ Read more

⤋ Read More

使用 Go 語言的 bytes 包高效地操作字符串
在編程語言 Go 中,bytes包提供了一系列用於操作[]byte類型的函數,這非常有用,特別是當你需要處理大量的字符串和切片時。通過使用bytes.Buffer,你可以高效地構建和修改字符串,而不必擔心頻繁的內存分配和字符串拼接導致的性能問題。下面,我們將深入瞭解如何使用bytes.Buffer,並通過豐富的示例演示它的強大功能。Buffer 的基本用法————bytes.Buf ⌘ Read more

⤋ Read More

Golang 狀態機設計模式
本文介紹了 Golang 狀態機模式的一個實現示例,通過該模式,可以解耦調用鏈,有助於實現測試友好的代碼,提高代碼質量。原文: Go State Machine Patterns[1]導言在我們開發的許多項目中,都需要依賴某種運行狀態從而實現連續操作。這方面的例子包括:解析配置語言、編程語言等 在系統、路由器、集羣上執行操作… ETL(Extract Transform Loa ⌘ Read more

⤋ 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 MoreRead 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

⤋ Read More

Go 項目文件命名規範是什麼?
計算機科學中只有兩件難事:緩存失效和命名。—— 菲爾 · 卡爾頓(Phil Karlton)。在編程世界中,選擇正確的命名約定是打開可讀和可維護代碼大門的重要途徑。在使用 Go 語言開發大型項目時,文件命名是構建清晰項目結構的關鍵一環,一個合理的文件命名規範不僅能提高開發效率,還能降低團隊協作中的溝通成本。在這篇博文中,我們將深入探討 Go 中命名的最佳實踐。在探討 Go 文件命名規範之前,我 ⌘ Read more

⤋ Read More

Google 官方發佈 Go 語言編碼規範
在現代軟件開發中,代碼的可讀性和一致性是至關重要的。尤其是當團隊規模擴大時,遵循一致的編碼規範可以顯著提高代碼的可維護性和團隊協作效率。本文將深入探討 Go 語言的 Google 編碼規範,並結合具體示例,幫助你在實際開發中應用這些規範。爲什麼需要編碼規範?———-編碼規範不僅僅是 “如何寫代碼” 的指導方針,它更是團隊協作的基石。遵守編碼規範可以:提高代碼的可讀性:一致的代碼風格使得 ⌘ Read more

⤋ Read More

在 Golang 中不要簡單的返回 err
相反, 添加相關的調試細節。有些人喜歡抱怨 Go 需要編寫大量的 “ iferr!=nil{returnerr}” 代碼塊。這些人並沒有真正理解 Go 的錯誤處理機制。實際上, 他們抱怨的正是處理 Go 錯誤的完全錯誤方式: returnerr是一種反模式。讓我通過一些示例代碼來解釋我的意思: 一個用於配置 mTLS[1] 連接的輔助庫。(“雙向 TLS” 是向服務器證明客戶端身份的一種方式。)p ⌘ Read more

⤋ Read More

[譯]Go 中的循環依賴:如何解決這個問題
作爲一個 Golang 開發,你可能在項目中遇到過包的循環依賴問題。Golang 不允許循環依賴,如果檢測到代碼中存在這種情況,在編譯時就會拋出異常。本文會討論循環依賴是如何發生的以及如何處理。循環依賴假設我們有兩個包:p1 和 p2。當包 p1 依賴包 p2,包 p2 依賴包 p1 時,就會產生循環依賴。真實情況可能會更復雜一些。例如,包 p2 不直接依賴包 p1 而是依賴於包 p3,而 p3 ⌘ Read more

⤋ Read More

一致性哈希的基本概念及其 Golang 實現
在大規模分佈式系統的世界中,高效地管理和分配數據是一個關鍵挑戰。一種廣泛使用的技術是一致性哈希。這種方法確保數據在多個服務器之間均勻分佈,即使服務器的數量隨時間變化也是如此。本文將探討水平擴展、簡單哈希和一致性哈希的概念,並提供一個 Go 語言的示例實現。水平擴展在分佈式系統中,數據通常無法容納在單個服務器上。爲了處理大規模數據,數據被分佈在多臺機器上,這個過程稱爲水平擴展或分片。爲了確保可預測的 ⌘ Read more

⤋ 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

⤋ Read More

A spontaneous bike tour
This morning I was in a bit of a bad mood and got the idea that I needed to do some exercise again. I had taken a break for a week due to a cold. I also wanted to get out a bit because the weather was good. Then it was a spontaneous but perfect decision to go for a bike ride again. ⌘ Read more

⤋ Read More

C 語言竟可以調用 Go 語言函數,這是如何實現的?
大家好,我是飛哥!今天和大家聊一個問題,一門語言是否可以在同一個進程內調用另外一門語言實現的函數?例如 C 語言是否可以調用 Golang 實現的函數?注意我說的是同進程內調用,跨進程的 IPC、PRC 之類的技術不算。直接拋出這個問題的答案,同進程跨語言調用是可行的。在各種語言設計時,爲了複用其它語言生態中積累下來的大量的代碼資產,都會實現跨語言調用的機制。例如在 Golang 中,實現了 cg ⌘ Read more

⤋ Read More

萬字長文:Go 語言現代命令行框架 Cobra 詳解
Cobra 是一個 Go 語言開發的命令行(CLI)框架,它提供了簡潔、靈活且強大的方式來創建命令行程序。它包含一個用於創建命令行程序的庫(Cobra 庫),以及一個用於快速生成基於 Cobra 庫的命令行程序工具(Cobra 命令)。Cobra 是由 Go 團隊成員 spf13 爲 Hugo 項目創建的,並已被許多流行的 Go 項目所採用,如 Kubernetes、Helm、Docker (di ⌘ Read more

⤋ Read More

gojq:現代 Golang JSON 查詢神器
隨着現代應用程序對數據處理和解析需求的不斷增加,JSON 已成爲數據交換的主要格式之一。在 Golang 生態系統中,解析和操作 JSON 數據的工具層出不窮,而 gojq 則是其中一款功能強大且易於使用的 JSON 查詢工具。本文將深入解析 gojq,展示其強大功能和實際應用場景,並通過豐富的示例幫助讀者全面掌握這款利器。什麼是 gojq?———gojq 是一個用 Go 語言編寫的 ⌘ Read more

⤋ Read More

探索併發安全的 Go 語言 Map - 深入理解 cmap
在 Go 語言中,內建的map類型並不是線程安全的。也就是說,如果您在沒有任何併發控制的狀態下,在多個 goroutine 中對同一個map同時進行讀寫操作,那麼會出現競態條件(race condition),進而導致不可預見的結果。針對這一問題,地裏特(lrita)開發了cmap(concurrent-map),一個用於提供併發訪問的線程安全的map類型,它可以讓您在 Go 語言中更加方便地進行 ⌘ Read more

⤋ Read More

go 語言是如何實現協程的
go語言的精華就在於協程的設計,只有理解協程的設計思想和工作機制,才能確保我們能夠完全的利用協程編寫強大的併發程序。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。寫過很多有意思的技術博客,也還在研究並輸出技術的路上 ⌘ Read more

⤋ Read More

聊聊 go 語言基於 epoll 的網絡併發實現
在之前的文章中我們已經介紹了 epoll 模型,而本文就從 go 語言源碼的角度來了解一下,go 語言是如何基於 epoll 模型完成高性能的網絡協程併發程序的。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。 ⌘ Read more

⤋ Read More

這次用 Go 語言實現的多協程文件上傳,效果很明顯
多協程文件上傳是指利用多線程或多協程技術,同時上傳一個或多個文件,以提高上傳效率和速度。通過將文件分塊,每個塊由單獨的協程處理上傳,可以有效減少總上傳時間。Go 語言通過 goroutine 實現多協程文件上傳。多協程文件上傳的基本流程文件分塊:將大文件分成多個小塊,以便多個協程可以同時處理不同的塊。 上傳塊:每個協程負責上傳一個或多個塊。 合併塊:在服務器端接收到所有塊後,將其合併爲 ⌘ Read more

⤋ Read More

xgo: 一款新鮮出爐的 Go 代碼測試利器
大家好,我是江湖十年。我曾經寫過一篇文章《測試代碼終極解決方案 Monkey Patching》,裏面介紹了 Go 語言中的猴子補丁方案。如今,時隔數月我又發現了一款新的工具可以實現 Monkey Patching,本文將帶大家一起嚐鮮下這款新的測試工具表現如何。簡介簡單一句話介紹 xgo:它是一款強大的的 Go 測試工具集,功能包括 Trap、Mock、Trace、增量覆蓋率。當然,開發中最常用 ⌘ Read more

⤋ Read More

使用 Go 語言實現 pping
大家好,我是鳥窩。在前一篇 pping: 被動式 ping,計算網絡時延中,我給大家介紹了 pping 這個工具的原理和使用方法。這篇文章中,我將使用 Go 語言實現 pping 工具。通過這篇文章,你將瞭解到:如何使用 gopacket 來捕獲和解析網絡數據包 如何設置捕獲時長和過濾捕獲的數據包 如何在 CGO 下靜態編譯庫,如 libpcap 瞭解 TCP/IP 協議棧的基本 ⌘ Read more

⤋ Read More

go3d:Go 語言遊戲方向的高性能 2D-3D 數學庫
在面向性能的編程世界中,go3d是爲 Go 語言提供的一款 2D/3D 數學庫,致力於提高圖形計算的效率與速度。適用於那些需要進行向量、矩陣等數學計算以實現圖形處理的應用程序,go3d提供了一套豐富的 API,以支持高效的數學運算。下面,我們將深入瞭解這個庫的主要特性、結構和使用方式,以及如何在項目中有效利用它。主要特性—-高性能設計:go3d庫主要關注於性能,通過優化算法和數據結構來減少計算 ⌘ Read more

⤋ Read More

Go Gio:用 Go 語言編寫跨平臺即時模式 GUI 的庫
在構建現代應用程序的過程中,不同平臺間的兼容性是一個不容忽視的挑戰。Go Gio 是一個用 Go 編程語言開發的庫,它致力於簡化跨平臺 GUI(Graphical User Interface,圖形用戶界面) 的構建工作,提供一種所謂的 “即時” (Immediate Mode) 編程模型。這種模型與傳統的 “保留模式” (Retained Mode) GUI 庫,例如 GTK+ 或 Qt,有所不 ⌘ Read more

⤋ Read More

Go 項目開發中如何讀取應用配置?
幾乎所有的後端服務都需要一些配置項來配置我們的服務,一些小型的項目,配置不是很多,可以選擇只通過命令行參數來傳遞配置,但是大型項目配置很多,通過命令行參數傳遞就變的很麻煩,不好維護,標準的解決方案是將這些配置信息保存在配置文件中,由程序啓動時加載和解析。所以對於一個稍微大型點的系統,配置文件加載和解析就是一個剛需。Go 生態中有很多包可以加載並解析配置,目前最受歡迎的是 Viper 包。Viper ⌘ Read more

⤋ Read More

Cloudflare 最佳實踐:如何通過 Go PGO 回收 CPU
Golang 1.20 在 go 編譯器引入了對配置文件引導優化 (PGO) 的支持。這允許指導編譯器根據系統的真實行爲引入優化。在 Cloudflare 的可觀察性團隊中,我們維護着一些基於 Go 的服務,這些服務在全球範圍內使用數千個內核,因此,即使宣傳的節省 2-7%,也能大幅減少我們的 CPU 佔用空間,而且實際上是免費的。這將減少我們內部服務的 CPU 使用率,釋放這些資源來滿足客戶請求 ⌘ Read more

⤋ Read More

如何構建現代化的 Go 命令行工具?
在 Go 項目開發中,我們需要編寫 main 函數,並編譯成爲二進制文件,部署啓動服務。有多種方式可以開發一個 main 函數。例如你可以手擼一個 main 函數,並在 main 函數中處理命令行參數,配置文件解析,應用初始化等操作。如下所示:package mainimport ( ”flag” ”fmt”)func main() { // 解析命令行參數 option1 := flag.Str ⌘ Read more

⤋ Read More

用 Go 實現一個無界資源池
寫在文章開頭——我們希望通過 go 語言實現一個簡單的資源池,而這個資源池的資源包括但不限於:數據庫連接池 線程池 協程池 網絡連接池 只要這些資源實現我們指定的關閉方法,則都可以通過我們封裝的資源池進行統一管理,需要簡單說明一下這個資源池的要求:需要用戶指定資源以及資源的創建方法。 當協程通過Acquire方法獲取資源時,若發現當前池中有資源可以分配則直接返 ⌘ Read more

⤋ 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

⤋ Read More

Go 通過 ETCD 實現應用選主
原理Go 服務通過 ETCD client 實現有狀態服務的選主,A、B 兩個服務通過生成相同前綴的 key,並且把自己的 IP 值上傳給 ETCD,由於多個服務間會同時上傳,所以按照相同前綴去獲取創建的 key-value,然後通過時間進行排序,最早創建的則成爲 master。如果成爲 master 的服務一直在線的話,會對 key-value 進行 續約, 當 master 下線不能正常續約的 ⌘ Read more

⤋ Read More

Go 通道的高級玩法
大家好!我是 lincyang。在之前的討論中,我們已經探索了 Go 語言中通道(channel)的基本使用和核心概念。今天,我們將深入探討一些更高級的通道操作技巧,特別是單向通道的使用,以及如何通過它們提高代碼的安全性和模塊性。單向通道的介紹在 Go 中,通道通常是雙向的,意味着它們既可以發送數據也可以接收數據。然而,在某些情況下,限制通道只發送或只接收可以提高程序的可讀性和運行時安全。這就是單 ⌘ Read more

⤋ 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 MoreRead more

⤋ Read More

Go 如何編寫出可測試的代碼
之前寫了幾篇文章,介紹在 Go 中如何編寫測試代碼,以及如何解決被測試代碼中的外部依賴問題。但其實在編寫測試代碼之前,還有一個很重要的點,容易被忽略,就是什麼樣的代碼是可測試的代碼?爲了更方便的編寫測試,我們在編碼階段就應該要考慮到,自己寫出來的代碼是否能夠被測試。本文就來聊一聊在 Go 中如何寫出可測試的代碼。本文不講理論,只講我在實際開發過程中的經驗和思考,使用幾個實際的案例,來演示怎樣從根上 ⌘ Read more

⤋ Read More

使用 OpenTelemetry 實現 Golang 服務的可觀測系統
這篇文章中我們會討論可觀測性概念,並瞭解了有關 OpenTelemetry 的一些細節,然後會在 Golang 服務中對接 OpenTelemetry 實現分佈式系統可觀測性。Test Project我們將使用 Go 1.22 開發我們的測試服務。我們將構建一個 API,返回服務的名稱及其版本。我們將把我們的項目分成兩個簡單的文件(main.go 和 info.go)。// file: main. ⌘ Read more

⤋ Read More

Go 項目中使用 Base64Captcha 快速實現網站的驗證碼功能,內置多種類型的驗證碼
在當今世界,網站的安全性變得越來越重要。驗證碼作爲一種簡單而有效的驗證手段,已經被廣泛應用於各種在線平臺。Base64Captcha 是一個開源的 Go 語言庫,它提供了一個簡單、靈活的方式來生成多種形式的驗證碼,包括數字、字母、數字字母組合、算術式、音頻等形式的驗證碼。本文將深入講解 Base64Captcha 庫的使用方法和特點,幫助你在自己的項目中實現驗證碼功能。Base64Captcha ⌘ Read more

⤋ Read More

單元測試中如何解決 MySQL 存儲依賴問題
在編寫單元測試的過程中,如果被測試代碼有外部依賴,爲了便於測試,我們就要想辦法來解決這些外部依賴問題。在做 Web 開發時,MySQL 存儲就是一個非常常見的外部依賴,本文就來探討在 Go 語言中編寫單元測試時,如何解決 MySQL 存儲依賴。HTTP 服務程序示例假設我們有一個 HTTP 服務程序對外提供服務,代碼如下: main.gopackage mainimport ( ”encodin ⌘ Read more

⤋ Read More

單元測試中如何解決 Redis 存儲依賴問題
在編寫單元測試時,除了 MySQL 這個外部存儲依賴,Redis 應該是另一個最爲常見的外部存儲依賴了。我在《在 Go 語言單元測試中如何解決 MySQL 存儲依賴問題》一文中講解了如何解決 MySQL 外部依賴,本文就來講解下如何解決 Redis 外部依賴。登錄程序示例在 Web 開發中,登錄需求是一個較爲常見的功能。假設我們有一個 Login 函數,可以實現用戶登錄功能。它接收用戶手機號 + ⌘ Read more

⤋ Read More

如何使用 Go 語言優雅地實現接口限流
在衆多 Web 開發中,爲了保障服務器的穩定性,我們常常需要對接口的調用頻率做出限制。而 Go 語言的強大併發性能使其在此領域有出色的表現。本文將向你詳細展示如何利用 Go 語言實現接口限流。限流原理—-接口限流的目標是防止接口被過度調用,保護系統資源,包括 CPU、內存和帶寬等。限流通常應用於以下幾種場景:防止 DDoS 攻擊 控制非法爬蟲 公平分配系統資源 限流的實現方式 ⌘ Read more

⤋ Read More

This blog has no Onion Service anymore
I had Tor support in GoBlog for over three years now, but I decided to disable it on my blog (and the GoBlog blog) for now. Several times, Tor randomly started using a lot of memory on my VPS and even crashed my block one or two times. It could have been the Go library used to integrate Tor, or something else in the Tor code itself, I don’t know. ⌘ Read more

⤋ Read More

單元測試中如何解決 HTTP 網絡依賴問題
在開發 Web 應用程序時,確保 HTTP 功能的正確性是至關重要的。然而,由於 Web 應用程序通常涉及到與外部依賴的交互,編寫 HTTP 請求和響應的有效測試變得具有挑戰性。在進行單元測試時,我們必須思考如何解決被測程序的外部依賴問題。因此,在 Go 語言中,我們需要找到一種可靠的方法來測試 HTTP 請求和響應。本文將探討在 Go 中進行 HTTP 應用測試時,如何解決應用程序的依賴問題,以 ⌘ Read more

⤋ Read More

Golang 實現枚舉的多種方式及最佳實踐
枚舉提供了一種表示一組命名常量的方式。雖然 Go 語言沒有內置的枚舉類型,但開發者可以通過常量 / 自定義類型來模擬類似枚舉的行爲。枚舉在編程語言中扮演着至關重要的角色,提供了一種簡潔而富有表現力的方式來定義一組命名常量。雖然像 Java 或 C# 這樣的語言提供了對枚舉的內置支持,但 Go 採用了不同的方法。在 Go 中,枚舉並不是一種原生的語言特性,但開發者有幾種技術可供使用,以實現類似的功能 ⌘ Read more

⤋ 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

⤋ Read More

萬字長文——在 Go 中如何編寫測試代碼
在程序開發過程中,測試是非常重要的一環,甚至有一種開發模式叫 TDD(測試驅動開發),先編寫測試,再編寫功能代碼,通過測試來推動整個開發的進行,可見測試在開發中的重要程度。爲此,Go 語言提供了 testing 框架來方便我們編寫測試,本文將向大家介紹在 Go 中如何編寫測試代碼。測試分類在 Go 中,編寫的測試用例可以分爲四類:單元測試:測試函數名稱以 Test 開頭,如 TestXxx、Tes ⌘ Read more

⤋ Read More

Go FRP:快速反向代理助您穿越 NAT 或防火牆,輕鬆連接互聯網
在當前的互聯網架構中,NAT(網絡地址轉換)和防火牆是常見的網絡安全措施,它們爲內網提供了一層保護。然而,這同時也意味着在不進行特別配置的情況下,外部網絡無法直接訪問內網的服務。爲了解決這一問題,Go FRP(Fast Reverse Proxy)應運而生。它是一個快速的反向代理工具,可以幫助您將內網服務安全地暴露到外網,極大地簡化了穿越 NAT 或防火牆的過程。Go FRP 的工作原理—– ⌘ Read more

⤋ Read More

在 Go 語言中,這樣使用 Json 的
Encode將一個對象編碼成JSON數據,接受一個interface{}對象,返回[]byte和error:func Marshal(v interface{}) ([]byte, error)Marshal函數將會遞歸遍歷整個對象,依次按成員類型對這個對象進行編碼,類型轉換規則如下:bool類型 轉換爲JSON的Boolean 整數,浮點數等數值類型 轉換爲JSON的Number s ⌘ Read more

⤋ Read More

使用 Ollama 和 Go 基於文本嵌入模型實現文本向量化
基於 RAG + 大模型的應用已經成爲當前 AI 應用領域的一個熱門方向。RAG(Retrieval-Augmented Generation) 將檢索和生成兩個步驟相結合,利用外部知識庫來增強生成模型的能力 (如下圖來自網絡)。在 RAG 賦能的大模型應用中,關鍵的一步是將文本數據向量化後存儲在向量數據庫中 (如上圖的紅框),以實現快速的相似度搜索,從而檢索與輸入查詢相關的文本片段,再將檢索到的 ⌘ Read more

⤋ Read More

Go 未用代碼消除與可執行文件瘦身
在日常編寫 Go 代碼時,我們會編寫很多包,也會在編寫的包中引入了各種依賴包。在大型 Go 工程中,這些直接依賴和間接依賴的包數目可能會有幾十個甚至上百個。依賴包有大有小,但通常我們不會使用到依賴包中的所有導出函數或類型方法。這時 Go 初學者就會有一個疑問:這些直接依賴包和間接依賴包中的所有代碼是否會進入到最終的可執行文件中呢?即便我們只是使用了某個依賴包中的一個導出函數。這裏先給出結論:不會! ⌘ Read more

⤋ Read More

SeaweedFS:基於 Go 語言實現次世代的分佈式存儲解決方案
在如今這個數據爆炸的時代,企業和開發者迫切地需要一個高效可靠的分佈式存儲系統來管理他們海量的數據。SeaweedFS 以其出色的性能和靈活性,成爲了存儲行業的明星產品。在本文中,我們將深入剖析 SeaweedFS 的核心功能、架構細節,並通過示例來展現它在實際中的應用。SeaweedFS 概覽————SeaweedFS 是一款開源的分佈式存儲系統,專門設計來處理海量的文件以及數據。 ⌘ Read more

⤋ Read More

用 Go 語言做了一個分佈式限流器, 看看實現的方法與步驟
項目中需要對 api 的接口進行限流,但是麻煩的是,api 可能有多個節點,傳統的本地限流無法處理這個問題。限流的算法有很多,比如計數器法,漏斗法,令牌桶法,等等。各有利弊,相關博文網上很多,這裏不再贅述。項目的要求主要有以下幾點:支持本地 / 分佈式限流,接口統一 支持多種限流算法的切換 方便配置,配置方式不確定 go 語言不是很支持 OOP,我在實現的時候是按 Java 的思 ⌘ Read more

⤋ Read More

Go 命令行參數解析工具 pflag 使用
在使用 Go 進行開發的過程中,命令行參數解析是我們經常遇到的需求。儘管 Go 標準庫提供了 flag 包用於實現命令行參數解析,但只能滿足基本需要,不支持高級特性。於是 Go 社區中出現了一個叫 pflag 的第三方包,功能更加全面且足夠強大。在本文中,我們將學習並掌握如何使用 pflag。特點pflag 作爲 Go 內置 flag 包的替代品,具有如下特點:實現了 POSIX/GNU 風格的 ⌘ Read more

⤋ Read More

用 Golang 做一個永久阻塞,有哪些小技巧 ?
Go 的運行時的當前設計,假定程序員自己負責檢測何時終止一個 goroutine 以及何時終止該程序。可以通過調用 os.Exit 或從 main() 函數的返回來以正常方式終止程序。而有時候我們需要的是使程序阻塞在這一行。使用 sync.WaitGroup 一直等待直到 WaitGroup 等於 0package mainimport ”sync”func main() {    var wg ⌘ Read more

⤋ Read More

Goose:Go 語言漸進式的數據庫遷移工具
數據庫遷移是軟件開發過程中重要的一部分,隨着業務的發展和需求的變化,數據庫結構經常需要做出調整。Goose 是一個出色的數據庫遷移工具,它通過 SQL 腳本和 Go 函數支持漸進式的數據庫變化。下面是一篇詳細的文章,它將深入介紹 Goose 的用法,並提供豐富的示例幫助你開始使用 Goose。Goose 簡介——–Goose 是一款能夠管理數據庫架構變更的工具,提供了一系列命令來幫助開發 ⌘ Read more

⤋ Read More

Go Heap Profile 怎麼了?
Go heap profile 是常常用來檢查內存泄露和內存佔用大問題的問題的手段,而且非常常用。而且,我們也經常創建兩個間隔較長的 heap profile, 獲取它們的差值來方便查看內存泄露: Hi, 使用多年的 go pprof 檢查內存泄漏的方法居然是錯的?! [1]今天,度廠的一位同學提出了一個很有意思的案例,讓我們對 heap profile 有了更深的理解。問題: heap prof ⌘ Read more

⤋ Read More

Go 語言實現輕量級全文檢索引擎
黎明破曉,我在陽光的照射下觀察到一個光鮮亮麗的開源項目——ZincSearch。這並不是一個大型的項目,但是其優雅而堅韌的特質讓我深深着迷。鑄就在 Go 語言的火爐中,ZincSearch 提供了一個輕量級但功能強大的全文索引搜索引擎,這讓我對其深感興趣。ZincSearch 誕生背景—————在講述 ZincSearch 之前,首先需要了解它的誕生背景。隨着互聯網技術的迅速發 ⌘ Read more

⤋ Read More

Go 語言實現開源優雅的跨平臺 USDT 收付中間件
Epusdt(全稱:Easy Payment Usdt)是一個由 Go 語言編寫的私有化部署 Usdt 支付中間件 (Trc20 網絡)。站長或開發者可以通過 Epusdt 提供的 http api 集成至任何系統,無需過多的配置,僅僅依賴 mysql 和 redis。通過它,可以實現 USDT 的在線支付和消息回調,均可在優雅和瞬間完成。私有化搭建使得無需額外的手續費和簽約費用,Usdt 代幣直 ⌘ Read more

⤋ 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.

⤋ Read More

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

⤋ Read More

利用 Go 操控 Etcd:構建強一致性系統的祕訣
etcd 是一個開源的、高可用的分佈式鍵值(key-value)存儲系統,它主要用來共享配置和服務發現。etcd 由 CoreOS 團隊開發,是以 Go 語言編寫的。etcd 採用了 Raft 協議來處理日誌複製以提供強一致性和高可用性,它成爲很多分佈式系統和雲原生技術(如 Kubernetes)中的基礎組件。etcd 的核心特性包括:簡潔的鍵值存儲:etcd 提供 HTTP/JSON API,允 ⌘ Read more

⤋ Read More

使用 Makefile 輕鬆管理 Go 項目:提高開發效率的利器
一、介紹1、make 介紹make是一個構建自動化工具,會在當前目錄下尋找Makefile或makefile文件 如果存在相應的文件,它就會依據其中定義好的規則完成構建任務 2、Makefile 介紹 藉助Makefile我們在編譯過程中不再需要每次手動輸入編譯的命令和編譯的參數,可以極大簡化項目編譯過程。 我們可以把Makefile簡單理解爲它定義了一個項目文件的編譯規則。 ⌘ Read more

⤋ Read More

Google 孵化了 3 個 Go 安全庫,推薦使用!
大家好,我是煎魚。Google 作爲一家用戶體量很大的企業,有非常多的產品,經常會被黑客攻擊或被拿來練手。因此其設計的產品、編程語言、工具庫等都會要求考慮安全性相關的內容。例如:各種供應鏈攻擊、CWE 等安全的查缺補漏等。我們作爲用戶(使用者),可以 “白嫖” 這些功能實現。直接複用在自家的業務上就可以了。這樣每年在護網上都能省不少勁。三個 Go 安全庫———本次 Google 輸出了 ⌘ Read more

⤋ Read More

Golang 高效的切片拼接和 Go1-22 中新的拼接方法
在 Go 中,切片拼接是一種常見操作,但如果處理不當,可能會導致性能問題或意外的副作用。本文將詳細介紹幾種切片拼接的高效方法,討論它們的優缺點以及適當的使用場景。 基本的方法和其限制使用 append 函數最直接的方法是使用 append 函數,它將一個切片的元素添加到另一個切片的末尾。slice1 := []int{1, 2}slice2 := []int{3, 4}result := app ⌘ Read more

⤋ Read More

Go 語言將 PDF 轉爲 Word ,代碼怎麼實現?
將 PDF 轉換爲 Word 這是一個很常見的功能了,用 Go 語言實現,可以通過以下步驟完成:1 安裝 PDF 轉換工具庫:首先需要使用 Go 語言中的 PDF 轉換庫,比如 pdftoword 或 pdfcpu。你可以使用 Go 的包管理工具(如 go get)來安裝這些庫。2 導入依賴庫:在 Go 項目中導入你選擇的 PDF 轉換庫,並確保正確地導入了所有需要的依賴項。3 加載 PDF 文件 ⌘ Read more

⤋ Read More

gnet:基於 Go 語言的高性能網絡框架
gnet 是一個基於 Go 語言的事件驅動型網絡框架,其設計宗旨是實現高性能和輕量級。gnet 在底層採用了 epoll 和 kqueue 機制,相較於 Go 語言標準庫 net 在特定場景下有着更好的性能和更低的內存消耗。雖然 gnet 並非旨在取代 Go 語言的 net 庫,但它提供了另一種在 Go 生態系統中構建性能敏感型網絡服務的選擇。通過實現應用層的協議(如 HTTP、RPC、WebSo ⌘ Read more

⤋ Read More

go-money 實現貨幣運算的金標準
在進行金融領域的軟件開發時,貨幣值的精確表示和操作至關重要。由於浮點數帶來的精度問題,傳統的處理方式經常導致數值上的細微誤差。針對這一問題,go-money包提供了基於 Go 語言的解決方案,實現了 Fowler 的貨幣模式。本文將深入解析go-money包,演示其具體的使用方式,並通過豐富的示例讓您掌握如何在 Go 項目中實現精確的貨幣計算。起步:安裝 go-money————- ⌘ Read more

⤋ Read More

使用 Go 語言中的 Buffer 實現高性能處理字節和字符串
在 Go 語言標準庫中,bytes包提供了對 byte slice ([]byte) 的便捷操作,其中Buffer是一個實現了io.Reader和io.Writer接口的可變大小的字節緩衝。我們通常使用Buffer來讀寫數據、處理字符串和字節的過程中實現高性能的操作。Buffer 的使用場景————Buffer在以下場景中特別有用:當需要一個字節緩衝時 進行字符串的高效拼接 ⌘ Read more

⤋ Read More

Golang 異步編程方式和技巧
Golang 基於多線程、協程實現,與生俱來適合異步編程,當我們遇到那種需要批量處理且耗時的操作時,傳統的線性執行就顯得喫力,這時就會想到異步並行處理。下面介紹一些異步編程方式和技巧。作者:zvalhu一、使用方式1.1、最簡單的最常用的方式:使用 go 關鍵詞func main() { go func() {  fmt.Println(“hello world1”) }() go func( ⌘ Read more

⤋ 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

⤋ 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 MoreRead 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 MoreRead more

⤋ Read More

Go 語言實現 dll 惡意劫持轉發
dll 轉發概述————dll 轉發: 攻擊者使用惡意 dll 替換原始 dll,重命名原始 dll 並通過惡意 dll 將原先的功能轉發至原始 dll。該惡意 dll 一般用來專門執行攻擊者希望攔截或修改的功能,同時將所有其他功能轉發至原始 dll一般可與 dll 劫持共同使用。dll 搜索順序首先我們來看一下 Windows 系統中 dll 的搜索順序 上圖中攻擊者可以控制的 ⌘ Read more

⤋ Read More

基於 go 實現 redis 之主幹框架
0 前言本着學習和實踐的目的,從本期開始,我將和大家一起走進一個新的專題—— 【基於 go 實現 redis】 .該專題圍繞着我的一個開源項目——goredis 展開. 由於個人水平有限,如有不到位之處,歡迎批評指正:https://github.com/xiaoxuxiansheng/goredis本系列計劃分爲四篇內容:• 基於 go 實現 redis 之主幹框架(本篇): 在宏觀視角下縱覽 ⌘ Read more

⤋ Read More

Go 語言使用 Watermill 構建高性能事件流處理
在今天的數據驅動世界中,異步通信模式對實現高效的數據處理和服務間通信至關重要。Go 語言因其簡潔的語法、強大的併發支持而成爲處理高併發事件流的理想選擇。在衆多 Go 語言庫中,Watermill 是一個值得關注的事件流處理庫。本文將深入探討 Watermill 的內部機制、優點以及如何在 Go 項目中有效地利用它來處理異步請求。Watermill 簡介————Watermill 是 ⌘ Read more

⤋ Read More

Go 語言是 如何實現 HTTP 代理 和 反向代理
代理的核心功能可以用一句話概括:接受客戶端的請求,轉發到後端服務器,獲得應答之後返回給客戶端。代理的功能有很多,事實上整個互聯網到處都充斥着代理服務器。如果所有的 HTTP 訪問都是客戶端和服務器端直接進行的話,我們的網絡不僅會變得緩慢,而且性能會大打折扣。代理服務器根據不同的配置和使用,可能會有不同的功能,這些功能主要包括:內容過濾:代理可以根據一定的規則限制某些請求的連接。比如有些公司會設置內 ⌘ Read more

⤋ Read More

快速優化 Golang 代碼的幾個小 Tips
本文將提供一些代碼優化指南,希望能夠幫助開發者增強其程序性能並簡化開發,實現更高效和健壯的編碼,解鎖 Golang 應用程序的潛力。 下面是我從自己平時開發常用的實用庫中隨機選擇的一些有用且通用的代碼片段。Tracking Execution Time如果你想要跟蹤 Go 中函數的執行時間,有一個簡單而高效的技巧,只需使用 defer 關鍵字即可實現一行代碼。你只需要一個 TrackTime 函數 ⌘ Read more

⤋ Read More