yue-fang-readfog-go 

feeds.twtxt.net

No description provided.

用 Go 語言 - Redis 實現分佈式鎖,我還是第一次
一 爲什麼需要分佈式鎖 共享資源訪問控制: 當多個節點需要同時訪問共享資源時,爲了避免併發寫入導致數據不一致,需要使用分佈式鎖確保同時只有一個節點可以寫入或修改共享資源。避免重複執行: 在分佈式系統中,某些操作可能需要在整個系統中只執行一次,比如定時任務、數據初始化等。爲了避免多個節點同時執行這些操作,需要使用分佈式鎖來確保只有一個節點可以執行。任務協調: 在分佈式任務隊列中,多個節點競爭執行任 ⌘ Read more

⤋ Read More

Go 一行代碼測量函數的執行時間
Golang Tips 是翻譯的 Phuong Le @func25[1] 陸陸續續的發表的推文,目前已經發表 70 + 了。我徵得 Phuong Le 的同意後,會逐步把這些推翻翻譯過來,發佈到公衆號上。因爲是推文,可能原作者的內容比較簡單,比如第一個 tip 就一張圖片,我會相應的進行擴充,豐富其內容。 後續也會在 github 建立一個項目,大家都可以參與進行翻譯。我們可以通過 defe ⌘ Read more

⤋ Read More

專爲 Go 語言設計的函數式編程庫 fp-go
背景介紹在編程領域中,函數式編程是一種編程範式,它將計算視爲函數的評估,避免改變狀態和可變數據。然而,Go 語言並沒有內建對函數式編程的支持,這使得在 Go 語言中實現函數式編程變得困難。今天要給大家推薦一個 GitHub 開源項目 IBM/fp-go,該項目在 GitHub 有超過 1.1k Star,用一句話介紹該項目就是:“functional programming library for ⌘ Read more

⤋ Read More

Otter:探索 Go 語言中高效無鎖緩存庫的實現與應用
在當今軟件開發的背景下,性能優化已經成爲了一個不可或缺的部分。尤其是在緩存技術這一塊,優秀的緩存機制不僅能大幅提高應用的響應速度,更能夠有效減輕後端系統的壓力。今天,我們要深入探究的是 Otter——這是一個針對 Go 語言設計的高性能無鎖緩存庫。接下來,我們將詳細介紹 Otter 的設計原理、特性與使用方法,並通過實例演示如何在 Go 項目中集成 Otter。Otter 緩存庫概述——- ⌘ Read more

⤋ Read More

使用 gofn 和 pipe 助力 Golang 函數式編程
今天要介紹的是兩個在函數式編程裏面很有用的 package,通過使用 gofn[1] 和 pipe[2] 庫讓 Go 的函數式編程更強大。Go 的函數式編程由於本質上,Go 並不像 Haskell 或 Erlang 那樣是純函數式語言,但這並不意味着我們不能應用函數式編程的概念來編寫簡潔、可讀和高效的代碼。這正是 gofn 和 pipe 發揮作用的地方。gofn 和 pipegofn:一個在 Go ⌘ Read more

⤋ Read More

Go 標準庫中的一個設計敗筆:哨兵錯誤
大家好,我是煎魚。在 Go 的歷史發展中,總是有或多或少的坑。最近遇到一個跟錯誤類型定義和聲明使用有關的小坑。翻了一圈 Go 社區裏的爭論,發現又是一個暫時無法解決的未解之坑。今天分享給大家,平時開發時也可以給自己避避坑,以免有人亂用。快速背景—-在 Go 裏有一種錯誤類型的定義,官方叫做哨兵錯誤(Sentinel errors):哨兵錯誤,常用於在程序中與全局變量的值對比。可以參考最常見的 ⌘ Read more

⤋ Read More

gRPC OTel 鏈路追蹤
Open-Telemetry 的第三方軟件包合集 包括了多個社區中常用庫的 OpenTelemetry 支持。隨着 OpenTelemetry 的不斷迭代,相信整個鏈路追蹤的生態也會越發完善。gRPC 的鏈路追蹤———-採集 gRPC 的 trace 數據,推薦使用 otelgrpc 。安裝依賴。go get go.opentelemetry.io/contrib/instrument ⌘ Read more

⤋ Read More

Go 類型安全的 Pool
池(sync.Pool)是一組可單獨保存 (Set) 和檢索 (Get) 的臨時對象集合。存儲在池中的任何項都可能在任何時候自動移除而無需通知。如果池在移除項時持有該對象的唯一引用,那麼這個對象可能會被釋放掉。池能夠確保在多個 goroutine 同時訪問時的安全性。池的目的在於緩存已分配但未使用的對象以便後續複用,減輕垃圾收集器的壓力。也就是說池的功能是爲了重用對象,目的是減輕 GC 的壓力。類 ⌘ Read more

⤋ Read More

Go HTTP 鏈路追蹤
Open-Telemetry 的第三方軟件包合集 包括了多個社區中常用庫的 OpenTelemetry 支持。隨着 OpenTelemetry 的不斷迭代,相信整個鏈路追蹤的生態也會越發完善。基於 OTel 的 HTTP 鏈路追蹤——————-基於 OTel 的 HTTP 客戶端和服務端鏈路追蹤實踐。客戶端實現 HTTP client 的鏈路追蹤。package maini ⌘ Read more

⤋ Read More

Golang 使用 Worker Pool 模式釋放併發性能
我們都知道 Go 具有卓越的併發特性,Worker Pool pattern(工作池模式)是一種併發設計模式,它用於管理一組工作線程以執行任務。本文用一個例子深入講解如何使用 Worker Pool 模式提升程序的併發性能。拋出問題快速計算一個數字數組中每個數字的平方,並返回結果數組(該數組只包含從 1 到 150 的整數)。Pattern 1 : N routines for N numbers ⌘ Read more

⤋ Read More

Golang 如何動態解析 JSON
Go 以其簡潔高效而聞名,提供了強大的工具用於處理 JSON 數據。雖然基於結構體的解析很常見,但在某些情況下,JSON 結構是動態的或未知的。在本文章中,我們將探討如何使用 Go 語言中的空接口進行動態 JSON 解析,從而實現靈活性,無需預定義結構體。什麼是 Dynamic JSON Parsing動態 JSON 解析指的是能夠處理具有不同結構的 JSON 數據,適應不同模式而無需嚴格定義。在 ⌘ Read more

⤋ Read More

使用 Golang 構建你的 LLM API
大語言模型,像 ChatGPT, Llama 等已經席捲全球,從上圖的數據可以看出,ChatGPT 花了 5 天時間就達到了 100 萬用戶。而 Netflix 則花了近 4 年的時間。本文將使用 Gin 和 Langchain 教你快速構建一套 LLM API。GinGin[1] 是一個用於使用 GoLang 構建 API 的現代、快速的 Web 框架。它被設計爲易於使用、高效且性能出色,利用了 ⌘ Read more

⤋ Read More

一文掌握 Golang Empty Struct 的所有用法
在 Go 語言中,空結構體被用作佔位符,當我們想要創建一個不攜帶任何數據的類型時。這個概念經常被用來表示特定的行爲,或者將該類型用作類似集合的數據結構。下面是個使用空結構體的例子:package mainimport ( ”fmt” ”unsafe”)// EmptyStruct is an empty struct typetype EmptyStruct struct{}func main() ⌘ Read more

⤋ Read More

Golang 如何實現訪問私有成員
在 Go 語言編程中,我們都知道首字母小寫的成員表明它是不公開的,即私有的。一般情況下,我們無法直接訪問一個包中的私有成員。然而,Go 語言提供了一些不尋常的手段允許我們在特定情況下繞過這一限制。在這篇文章中,我們將深入探討這些技巧,並通過詳細的說明和代碼示例來展示它們的使用方法。但在此必須提醒:這些方法很少用於生產環境,因爲它們破壞了封裝性,很容易帶來難以發現的 bug 和安全問題。在下文,我們 ⌘ Read more

⤋ Read More

用 Go 語言實現多協程文件上傳,斷點續傳,試試!
網上很多文件基本都是多協程下載文件要麼就只有單協程的斷點續傳,這裏給大家寫一個支持有進度條的多協程下載文件,也支持斷點續傳。好了,直接看代碼就好了,小編已加上詳細的解釋與說明package mainimport ( ”fmt” ”io” ”os” ”regexp” ”strconv” ”sync” ”github.com/qianlnk/pgbar”)/* 需求:1. 多協程下載文件2.斷點續連* ⌘ Read more

⤋ Read More

使用 Go 語言打造強大的網絡掃描神器
在這個信息安全意識日益提高的時代,網絡安全人員需要可靠、靈活且強大的工具來進行日常的網絡掃描和數據收集。在衆多開源項目中,Project Discovery 的 httpx 無疑是一顆璀璨的明星。httpx 是一款能夠執行大量 HTTP 請求的命令行工具,旨在對 Web 服務進行多功能且快速的掃描。它支持 HTTP/2, 支持進行方法、頭等多種格式的複雜查詢,還能檢測 Web 服務器的許多面向安全 ⌘ Read more

⤋ Read More

Go 語言中怎麼使用依賴注入?
01 介紹在 Go 語言項目開發中,我們處理組件層級之間的依賴關係時,通常我們會先在依賴層級的代碼中實例化被依賴層級,然後調用它的方法,即依賴方需要主動獲取被依賴方。但是,當被依賴層級的代碼發生變化時,依賴層級的代碼也需要修改,耦合性比較高,代碼不方便擴展。所謂依賴注入,即依賴方不再需要主動獲取被依賴方,而是被依賴方主動傳遞給依賴方。本文我們介紹 Go 語言怎麼使用依賴注入。02 Go 語言使用依 ⌘ Read more

⤋ Read More

深入理解 Go 併發,靈活的 goroutine 模型與調度策略
在go中,協程co-routine被改爲goroutine,一個goroutine只佔幾 kb,因此可以有大量的goroutine存在,另一方面goroutine 的調度器非常靈活,本文給大家介紹下Go併發的方法之goroutine模型與調度策略,感興趣的朋友一起看看吧單進程操作系統早期的單進程操作系統,可以理解爲只有一個時間軸,CPU 順序執行每一個進程 / 線程,這種順序執行的方式,CPU 同 ⌘ Read more

⤋ Read More

最具研讀價值的 Go 源碼之一:context 包
前言你瞭解 Context 中的回溯鏈和樹結構嗎?想知道 Context 如何觸發級聯取消嗎?本文將換個角度聊一聊 golang 中的 context,讓你真正理解什麼是 Context。context 包中的代碼雖然只有 600 多行,但已經成爲了併發控制、超時控制的標準做法,可以說是真正的短小而精悍,是十分值得研讀的 Go 源碼之一。本文首先從整體的視角解析了 context 的主要接口和函數 ⌘ Read more

⤋ Read More

一文帶你完整了解 Go 語言 IO 基礎庫
作者 | 百度小程序團隊 導讀 introduction對於剛接觸 Golang 學習的同學,估計比較難掌握的知識點之一就是文件 IO 處理,光在基礎庫裏會發現 golang 除了 io 包提供文件處理外,os 包,http 包,embed 包都有提供類似的處理,由於 Golang 的繼承表達採用的是隱式的表達, 所以他們之間有什麼關係?能否相互轉換處理?是非常難一眼看出來的。本文就幫大家完整地 ⌘ Read more

⤋ Read More

OpenTelemetry Go 語言教程
本教程將演示如何在 Go 中使用 OpenTelemetry,我們將手寫一個簡單的應用程序,並向外發送鏈路追蹤和指標數據。準備示例應用程序——–創建一個扔骰子的程序。在本地新建一個dice目錄,並進入該目錄下。mkdir dicecd dice執行 go mod 初始化。go mod init dice在同一目錄下創建 main.go 文件,並添加以下代碼。package mainimp ⌘ Read more

⤋ Read More

Go 語言的宕機恢復,如何防止程序奔潰
Recover 是一個 Go 語言的內建函數,可以讓進入宕機流程中的 goroutine 恢復過來,recover 僅在延遲函數 defer 中有效,在正常的執行過程中,調用 recover 會返回 nil 並且沒有其他任何效果,如果當前的 goroutine 陷入恐慌,調用 recover 可以捕獲到 panic 的輸入值,並且恢復正常的執行。通常來說,不應該對進入 panic 宕機的程序做任何 ⌘ Read more

⤋ Read More

Goroutine 調度器揭祕
你以前可能聽說過 Goroutine 調度器,但你對它的工作原理了解多少?它如何將 goroutine 與線程配對?不用着急理解上面的圖像, 因爲我們要從最基本的開始。goroutine 被分配到線程中運行, 這由 goroutine 調度器在後臺處理。根據我們之前的討論, 我們瞭解到以下關於 goroutine 的幾點:就原始執行速度而言, goroutine 並不一定比線程更快, 因爲它們需要 ⌘ Read more

⤋ Read More

Go 語言的雙向鏈表、list 操作和雙向循環鏈表- 這些誰認識?
雙向鏈表1)雙向鏈表的結構雙向鏈表結構中元素在內存中不是緊鄰空間,而是每個元素中存放上一個元素和後一個元素的地址第一個元素稱爲(頭)元素,前連接(前置指針域)爲 nil 最後一個元素稱爲 尾(foot)元素,後連接(後置指針域)尾 nil 雙向鏈表的優點在執行新增元素或刪除元素時效率高,獲取任意一個元素,可以方便的在這個元素前後插入元素 充分利用內存空間,實現內存靈活管理 ⌘ Read more

⤋ Read More

更強大的 Go 執行跟蹤能力
runtime/trace 包 1] 包含了一個強大的工具, 可用於理解和調試 Go 程序。該功能允許我們在一段時間內對每個 goroutine 的執行進行跟蹤。使用 go tool trace 命令 [2), 我們就可以可視化和探索這些跟蹤數據。跟蹤的魔力在於, 它可以輕鬆揭示程序中一些通過其他方式很難發現的問題。例如, 大量 goroutine 在同一個 channel 上阻塞導致的併發瓶頸, ⌘ Read more

⤋ Read More

使用 mapstructure 高效解析 Go 語言中的動態數據結構
在處理數據流(如 JSON、Gob 等)過程中,我們可能不知道底層數據的結構,這時mapstructure庫就能大顯身手了。這款 Go 語言庫可以將通用 map 值解碼爲 Go 本地結構,也可執行反向操作,並提供有用的錯誤處理功能。今天,我們就深入瞭解這個庫,並列舉一些豐富的示例來幫助你掌握它的使用方法。簡介–mapstructure是一款 Go 庫,允許開發者將map[string]inter ⌘ Read more

⤋ Read More

Go 錯誤處理:用 select-case 來解決這個歷史難題?
大家好,我是煎魚。日常看 Go 社區的一些新動態,發現大家對於錯誤處理的新提案是很積極。上次分享了一篇想要用 switch-case 來解決現狀的新提案,不少同學認爲不可行。沒想到 Go 社區的同學腦洞還是很大的,這幾天又整出來個 select-case 的新提案的方式來解決錯誤處理。今天基於此給大家分享一下社區裏的新腦洞。快速背景—-本節的背景主要是給不瞭解的同學拉通一下。如果已經知道的可以 ⌘ Read more

⤋ Read More

Go 中的高速數據包處理: 從 net-Dial 到 AF_XDP
推進 Go 的極限: 從 net.Dial 到系統調用、AFPACKET 和極速 AFXDP。數據包發送性能的基準測試。最近, 我編寫了一個 Go 程序, 向數百萬個 IP 地址發送 ICMP ping 消息 [1]。顯然, 我希望這個過程能儘可能快速高效地完成。因此, 這促使我研究各種與網絡棧交互和快速發送數據包的各種方法。這是一個有趣的旅程, 所以在本文中, 我將分享一些學習成果, 並記錄 ⌘ Read more

⤋ Read More

寶藏級 Go 語言開源項目——教你自己動手開發互聯網搜索引擎
DIYSearchEngine 是一個能夠高速採集海量互聯網數據的開源搜索引擎,採用 Go 語言開發。Github 地址: https://github.com/johnlui/DIYSearchEngine 運行方法 首先,給自己準備一杯咖啡。把本項目下載到本地 編譯:go build -o ese *.go 修改配置文件:cp .env.example .env,然後把裏面的 ⌘ Read more

⤋ Read More

4 秒處理 10 億行數據! Go 語言的 9 大代碼方案,一個比一個快
編譯 | 核子可樂、凌敏來自 | InfoQ2024 年開年,Java “十億行挑戰”(1BRC)火爆外網。該挑戰賽要求開發者編寫一個 Java 程序,從一個包含十億行信息的文本文件中檢索溫度測量值,並計算每個氣象站的最小、平均值和最高溫度。“十億行挑戰” 的目標是爲這項任務創建最快的實現,同時探索現代 Java 的優勢。這項挑戰聽起來很簡單。但十億行代碼實際是一項龐大的工程,如果以每個數字 3 ⌘ Read more

⤋ Read More

Go arena 民間庫來了,可以手動管理內存!
大家好,我是煎魚。上年我們有討論過關於 Go arena 手動管理內存的相關提案。一開始還高歌猛進,但沒想到後面由於嚴重的 API 問題(想把 arena 應用到其他的標準庫中,但會引入大問題):Go 核心團隊中途咕咕咕到現在,沒有新的推動和突破性進展,實屬尷尬。最近有社區的大佬有了新的動作,來自 Grafana 的 @Miguel Ángel Ortuño 開源了一個新的第三方庫 ortuman ⌘ Read more

⤋ Read More

slog 終極指南
在本文中,我們將探討 Go 中的結構化日誌記錄,並特別關注最近推出的 log/slog[1] 軟件包, 這個軟件包旨在爲 Go 帶來高性能、結構化和分級的日誌記錄標準庫。該軟件包起源於由 Jonathan Amsterdam 發起的 GitHub 討論 [2], 後來專門建立了一個提案 [3] 細化設計。一旦定稿,它在 Go v1.21 版本中發佈。在以下各節中,我將全面呈現 slog 的功能, ⌘ Read more

⤋ Read More

Go 爲什麼不支持從 main 包中導入函數?
大家好,我是煎魚。作爲一個維護過許多有一定歷史沉澱的 Go 項目的人,在歷史債務下和奇葩需求下,會遇到一些迫於業務需求的技術訴求。訴求上是希望引用多項目,會出現從 main 包(package)中導入相關函數的這種使用訴求。爲了將多 Go 工程合併到一個大單體中使用。問題案例—-具體的使用案例如下。我們有一個 Go 應用,目錄結構如下:demo1├── go.mod├── main.go└── ⌘ Read more

⤋ Read More

fasthttp 是如何做到比 net-http 快十倍的
小許之前分享過標準庫 net/http 的實現原理,不過有個 fasthttp 的庫號稱比 net/http 快十倍呢!(畢竟名字就帶 fast 呢😆)哇,性能太強了吧,話不多說,本期小許和大家一起看看 fasthttp Server 端的底層實現,來看看到底是如何做到性能如此之快的,有哪些優秀的特性值得我們學習和借鑑的!Server 端處理流程對比在進行了解 fasthttp 底層代碼實現之前, ⌘ Read more

⤋ Read More

Golang 編寫 MySQL UDF
一、MySQL UDF———–這玩意全稱 “MySQL user-definable function”, 從名字就可以看出來叫 “用戶定義的方法”; 那麼 UDF 到底是幹啥的呢?簡單一句話說就是說: 你可以自己寫點代碼處理數據, 然後把這段代碼編譯成動態鏈接庫 (so), 最後在 MySQL 中動態加載後用戶就可以用了.二、解決方案——由於要檢查數據庫, 但是實際上審查並 ⌘ Read more

⤋ Read More

深入探究 Go log 標準庫
Go 語言標準庫中的 log 包設計簡潔明瞭,易於上手,可以輕鬆記錄程序運行時的信息、調試錯誤以及跟蹤代碼執行過程中的問題等。使用 log 包無需繁瑣的配置即可直接使用。本文旨在深入探究 log 包的使用和原理,幫助讀者更好地瞭解和掌握它。使用先來看一個 log 包的使用示例:package mainimport “log”func main() { log.Print(“Print”) ⌘ Read more

⤋ Read More

Go 併發編程 —— I-O 聚合優化(動畫講解)
背景提要在存儲系統中,在確保功能不受損的前提下,儘量的減少讀寫 I/O 的次數是優化的一個重要方向,也就是聚合 I/O 的場景。讀寫操作雖然都有聚合 I/O 的需求,但各自的重點和實現方法卻有所不同。接下來,我們將分別探討讀和寫請求的聚合優化方法。讀請求的聚合以讀操作中,緩存優化是一種常見的優化手段。具體做法是將讀取的數據存儲在內存中,並通過一個唯一的 Key 來索引這些數據。當讀請求來到時,如果 ⌘ Read more

⤋ Read More

爲什麼 Golang Fasthttp 選擇使用 slice 而非 map 存儲請求數據
Fasthttp 是一個高性能的 Golang HTTP 框架,它在設計上做了許多優化以提高性能。其中一個顯著的設計選擇是使用 slice 而非 map 來存儲數據,尤其是在處理 HTTP headers 時。爲什麼呢?本文將從簡單到複雜,逐步剖析爲什麼 Fasthttp 選擇使用 slice 而非 map,並通過代碼示例解釋這一選擇背後高性能的原因Slice vs Map:基本概念——- ⌘ Read more

⤋ Read More

別再手寫配置了!動態配置管理實踐指南
*一、分佈式配置的意義1.1 什麼是分佈式配置分佈式配置管理是指在分佈式系統中,對不同節點上的配置文件進行集中式、動態化管理。與傳統通過修改配置文件進行配置相比,分佈式配置管理系統具有以下優點:(1) 中心化管理: 配置集中放在配置服務器上, 方便管理和控制。(2) 動態更新: 支持在線動態修改配置, 服務端會主動推送配置文件更新到客戶端。(3) 高可用 & 數據一致性: 配置服務器會構建集羣防止 ⌘ Read more

⤋ Read More

圖文講透 Golang 標準庫 net-http 實現原理 – 客戶端
客戶端的內容將是如何發送請求和接收響應,走完客戶端就把整個流程就完整的串聯起來了!這次我把調用的核心方法和流程走讀的函數也貼出來,這樣看應該更有邏輯感,重要部分用紅色標記了一下,可以着重看下。先了解下核心數據結構 Client 和 Request。Client 結構體type Client struct {     Transport RoundTripper     CheckRedirect ⌘ Read more

⤋ Read More

獲取請求 IP,nginx 配置方案,gin 框架,2024 版,go 語言
在使用 Gin 框架時,獲取用戶請求的真實 IP 地址涉及到多種情況,尤其在使用代理服務器(如 Nginx)時。本文將詳細介紹如何使用 Gin 自帶方法和其他方式獲取用戶 IP,以及在面對 Nginx 轉發時如何準確獲取客戶端 IP,同時討論與 IP 相關的安全問題及處理方法。第一章:概述——1.1 獲取用戶真實 IP 的重要性獲取用戶的真實 IP 地址是許多應用中必不可少的功能,用於識別 ⌘ Read more

⤋ Read More

淺聊 Go 分佈式鏈路追蹤
在現代複雜的分佈式系統環境中,對應用或系統進行性能診斷,這是一個極具挑戰性的任務。有時候,微服務的問題可能會影響到整個系統的鏈路,引發一系列難以追蹤的問題。對於使用 Go 語言的開發者來說,我們有幸的是,對於鏈路追蹤,我們有強大的工具——Go 的鏈路追蹤。什麼是鏈路追蹤?——–鏈路追蹤是一種性能優化策略,通過跟蹤和管理請求在應用環境中的路徑,我們可以更好地理解系統的行爲、性能瓶頸等問題。 ⌘ Read more

⤋ Read More

golang 高性能無 GC 的緩存庫 bigcache 是怎麼實現的?
我們寫代碼的時候,經常會需要從數據庫裏讀取一些數據,比如配置信息或者諸如每週熱點商品之類的數據。如果這些數據既不經常變化,又需要頻繁讀取,那比起每次都去讀數據庫,更優的解決方案就是將它們放到應用的本地內存裏,這樣可以省下不少數據庫 IO,性能嘎一下就上來了。那麼現在問題就來了,假設我要在某個服務應用裏實現一個緩存組件去存各種類型的數據,該怎麼實現這個組件呢?從一個 map 說起———- ⌘ Read more

⤋ Read More

實現負載均衡器,打造億級流量入口
*負載均衡概述什麼是負載均衡負載均衡是指通過某種手段, 將任務合理地分配到多個操作單元上進行執行, 從而使得系統的負載分散在不同操作單元上, 避免因爲單個操作單元負載過高而影響請求服務能力的技術手段。比如將大量的客戶端請求分擔給多個服務器處理, 從而避免單個服務器超負荷工作對服務的影響。負載均衡的作用負載均衡主要有以下幾個作用: 1. 降低單個服務器的壓力, 防止服務器過載; 2. 增 ⌘ Read more

⤋ Read More

Golang 數據結構性能優化實踐
僅僅通過對 struct 字段重新排序,優化內存對齊方式,就可以獲得明顯的內存和執行效率提升。原文: How to Speed Up Your Struct in Golang[1]如果你有 Golang 開發經驗,一定定義過 struct 類型。但可能你不知道,通過簡單的重新排序 struct 字段,可以極大提高 Go 程序的速度和內存使用效率!是不是難以置信?我們一起來看一下吧!簡單 De ⌘ Read more

⤋ Read More

如何正確處理 Go 項目中關於文件路徑的問題
在使用 Go 開發項目時,估計有不少人遇到過無法正確處理文件路徑的問題,特別是剛從如 PHP、python 這類動態語言轉向 Go 的朋友,已經習慣了通過相對源碼文件找到其他文件。這個問題能否合理解決,不僅關係到程序的可移植性,還直接影響到程序的穩定性和安全性。本文將嘗試從簡單到複雜,詳細介紹 Go 中獲取路徑的不同方法及應用場景。歡迎關注我的公衆號:引言首先,爲什麼要獲取文件路徑?一般來說,程序 ⌘ Read more

⤋ Read More

使用 Templ 進行 Go 模板化
使用 Templ 在 Go 項目中高效生成動態內容的指南—————————-動態內容生成是 Web 開發的一個基本方面。無論您是在構建網站、Web 應用程序還是 API,根據數據和模板生成動態內容的能力都至關重要。在 Go 編程世界中,一個名爲 “Templ” 的強大工具簡化了這一過程。在這份全面的指南中,我們將探索使用 Templ 進行 Go 模板化,它的關鍵 ⌘ Read more

⤋ Read More

Golang 泛型入門指南
Go 語言中的泛型是指一種語言特性,允許創建可以處理不同類型的函數、數據結構和接口。換句話說,泛型使得可以創建不受特定類型或數據結構限制的代碼。如果我們此前有使用 Java 或者 C++ 的經驗,那麼會很好理解。在 Go 語言引入泛型之前,開發人員必須編寫多個函數來處理不同類型的數據。這種方法通常很繁瑣,並導致代碼重複。有了泛型,開發人員可以編寫更簡潔和可重用的代碼,可以處理不同類型的數據。Go ⌘ Read more

⤋ Read More

Go 利用上下文進行併發計算
在 Go 編程中,上下文(context)是一個非常重要的概念,它包含了與請求相關的信息,如截止日期和取消信息,以及在請求處理管道中傳遞的其他數據。在併發編程中,特別是在處理請求時,正確處理上下文可以確保我們尊重和執行請求中設定的限制,如截止時間。讓我們通過一些代碼示例來探討如何在併發計算中使用上下文,以及如何在處理請求時尊重上下文所設定的截止日期和取消要求。// download 函數用於下載給 ⌘ Read more

⤋ Read More