yue-fang-readfog-go 

feeds.twtxt.net

No description provided.

Go 1-18 泛型全面講解:一篇講清泛型的全部
序2022 年 3 月 15 日,爭議非常大但同時也備受期待的泛型終於伴隨着 Go1.18 發佈了。可是因爲 Go 對泛型的支持時間跨度太大,有非常多的以 “泛型” 爲關鍵字的文章都是在介紹 Go1.18 之前的舊泛型提案或者設計,而很多設計最終在 Go1.18 中被廢棄或發生了更改。並且很多介紹 Go1.18 泛型的文章 (包括官方的) 都過於簡單,並沒對 Go 的泛型做完整的介紹,也沒讓大家意 ⌘ Read more

⤋ Read More

Golang 實現程序優雅退出的方法有哪些?
在 Go 語言中,實現程序的優雅退出是一項重要的任務,特別是在涉及到 HTTP 服務器、gRPC 服務器、以及其他後臺工作的情況下。以下是一些常見的平滑關閉方法:1. HTTP Server 平滑關閉Go 1.8 及以上版本提供了 http.Server 結構的 Shutdown 方法,用於平滑關閉 HTTP 服務器。package mainimport (    ”context”    ”ne ⌘ Read more

⤋ Read More

Go 語言常見錯誤 - 不使用 function option 模式
在使用 Golang 進行復雜的開發任務時,處理一個結構體有許多可選的配置項是常有的事。這也是在許多函數設計中共有的特徵,因爲這使得函數更容易使用,靈活性更強。然而,有時我們可能會看到錯誤的實踐,那就是 “遺漏使用 Function Option 模式”。在這篇文章中,我將詳細解釋Function Option的概念,並指出爲什麼我們應該使用它。我還將給出實例來展示如果忽略了Function Op ⌘ Read more

⤋ Read More

Go 語言常見錯誤 - any 沒傳遞任何信息
Go 語言,由於其高效強大的並行處理能力和優雅簡單的設計哲學,一直以來都是編程世界的寵兒。然而,對於一些 Go 新手和甚至熟悉 Go 的程序員也可能會遇到一個常見的錯誤: any沒傳遞任何信息。那麼,如何規避這個錯誤呢?本文將揭示其中的祕密。問題描述—-首先,在 Go 中的接口類型interface{}(也被稱作 “any” 類型)是一種空接口類型,可以接受任何類型的參數,無論是用戶自定義的類 ⌘ Read more

⤋ Read More

Go Context 到底放第一個參數傳,還是放結構體裏?
大家好,我是煎魚。前段時間我們在聊手動管理內存 arena 的後續時。我們有提到 context 的函數傳參等問題。當時在評論區有許多的小夥伴交流了起來,大家對此還是非常關注的:今天我們就來聊一聊 conetxt 傳參的這個事。到底擺哪?Go 官方推薦是什麼?快速介紹—-上下文(Context)是 Go 語言中非常有特色的一個特性,其主要的作用是在 goroutine 中進行上下文的傳遞,而在 ⌘ Read more

⤋ Read More

沒想到,Go 語言垃圾回收是這樣工作的!
*1. 垃圾回收概述1.1 什麼是垃圾回收垃圾回收 (Garbage Collection,GC) 是一種自動內存管理的機制, 用於自動釋放那些不再被程序使用的內存。它的主要思想是程序在申請內存時不需要釋放, 而是由垃圾回收器在程序運行的過程中找出那些不再使用的內存並回收它們。這與 C/C++ 語言中的手動內存管理形成對比, C/C++ 程序員需要自己跟蹤內存的分配和釋放。而 Go 語言中內存的分 ⌘ Read more

⤋ Read More

Go 內存管理探祕:自動化與性能的完美平衡
*一、Go 語言內存管理簡介Go 語言自動內存管理機制Go 語言以其簡潔高效的特性而備受開發者推崇,其中自動內存管理是其引以爲傲的一項特性。與傳統的手動內存管理語言不同,Go 語言通過垃圾回收器(GC)自動管理內存,極大地減輕了開發者的負擔。Go 語言的垃圾回收器採用的是基於併發標記 - 清除算法,這意味着垃圾回收的過程中,程序的執行並不會完全停滯,從而保證了較低的暫停時間。內存分配與回收策略Go ⌘ Read more

⤋ Read More

Go 調用 C-C– 函數全攻略
*一、Go 語言調用 C/C++ 函數cgo 基礎及工作原理Go 語言通過 cgo 和 C 語言的 ABI(Application Binary Interface) 進行交互。cgo 會生成相應的 C 代碼, 與 Go 代碼一起編譯成可執行文件或動態庫。cgo 的工作流程主要分爲 3 步:(1) 預處理: 將 Go 源碼中的 C 代碼塊提取出來, 生成 .c 和 .h 文件(2) 編譯: 調用 ⌘ Read more

⤋ Read More

Go 運行時的併發原語
這篇文章我們來了解一下隱藏在 Go 運行時中的一些併發原語, 因爲運行時是底座和包循環依賴等原因,運行時中很少使用標準庫中的併發原語,它有自己的併發原語。mutex在 runtime/runtime2.go[1] 定義了一個互斥鎖,它的定義如下:type mutex struct { lockRankStruct key uintptr}它可是運行時中的大紅人了,在很多數據結構中都被廣泛的使用,凡 ⌘ Read more

⤋ Read More

性能分析神器:pprof 命令詳解與實戰
*一、pprof 命令簡介pprof 的功能和作用Go 語言提供了一個強大的性能分析工具,即 pprof(profiling and tracing)。pprof 可以幫助開發者深入瞭解應用程序的性能狀況,從而更好地進行性能優化。其主要功能包括: CPU Profiling:定位 CPU 密集型任務,找到瓶頸; Memory Profiling:檢測內存使用情況,發現潛在的內存泄漏; ⌘ Read more

⤋ Read More

一個例子,給你講透典型的 Go 併發控制
Go 中可以使用一個go關鍵字讓程序異步執行一個比較常見的場景:逐個異步調用多個函數,或者循環中異步調用func main() { go do1() go do2() go do3()}// 或者func main() { for i := range []int{1,2,3}{  go do(i) }}如果瞭解 Go 併發機制,就知道main在其他 goroutine 運行完成之前就已經結束了, ⌘ Read more

⤋ Read More

掌握 go test 命令,寫出可信賴的代碼
*1. test 命令概述在開發過程中,測試是確保代碼質量和穩定性的關鍵步驟。通過測試,可及早發現潛在的問題,確保代碼的正確性和可維護性。Go 語言提供了強大的測試工具,其中 go test 命令是一個不可或缺的利器。1.1 單元測試單元測試是驗證代碼中最小可測試單元的過程。在 Go 中,單元測試通常位於與被測試代碼相同的包中,以 test.go 結尾的文件中。go test 會執行這些文件中的測 ⌘ Read more

⤋ Read More

使用 Golang Fiber 快速創建高性能的 Web 應用程序
Golang Fiber 是一個靈感來源於 Express.js 的 Web 開發框架,它旨在簡化 Go 語言中的 HTTP 服務開發,同時提供極高的性能。它基於 Fasthttp,這是一個快速的 HTTP 引擎,專爲高性能而設計。在這篇文章中,我們會詳細介紹如何使用 Fiber 創建 web 應用程序,並提供豐富的示例。開始前的準備——在開始之前,確保你已安裝了 Go 語言環境。你可以在 ⌘ Read more

⤋ Read More

Uber Go 出了個靜態分析工具 NilAway,還挺實用!
大家好,我是煎魚。風水輪流轉,Go 程序寫多了。總是會這有點問題,那有點問題。問題積累久了就容易出點事件,甚至是事故。這種時候大家往往會想着引入一些靜態分析工具來解決這個問題。元旦假期時剛好看到這個新輪子,分享給大家!NilAway 分析工具————最近 Uber 開發和開源了一個挺不錯的靜態分析工具 NilAway:使用場景是:在 Go 程序編譯時就能捕獲 nil,達到幫助開發人 ⌘ Read more

⤋ Read More

Go 巧用 io-Pipe– 優化內存佔用情況
當需要向服務端通過 http api 上傳大文件時候,通常會使用以下這種方式func main(){ filename := “nohup.out” body := new(bytes.Buffer) writer := multipart.NewWriter(body) part, err := writer.CreateFormFile(“file”, filename ⌘ Read more

⤋ Read More

假如沒有 go install,編譯會多痛苦?
*1. go install 命令簡介go install 命令是 Go 語言的標準命令, 用於編譯和安裝 Go 語言程序。1.1 命令作用及基本原理go install 命令的主要作用是編譯和安裝 Go 語言的可執行文件或庫文件。它的基本原理是: 1. 按照包依賴關係編譯傳遞進來的 main 包及其所有依賴的包 2. 鏈接必要的包生成可執行文件 3. 將生成的可執行文件拷貝到 ⌘ Read more

⤋ Read More

golang 定時器相關的函數超硬核解析
一、前言Golang 定時器包括:一次性定時器(Timer)和週期性定時器 (Ticker)。編程中經常會通過 timer 和 ticker、AfterFunc。定時器 NewTicker 是設定每隔多長時間觸發的,是連續觸發,而計時器 NewTimer 是等待多長時間觸發的,只觸發一次,兩者是不同的。等待時間函數 AfterFunc 是在 After 基礎上加了一個回調函數,是等待時間到來後在另 ⌘ Read more

⤋ Read More

Build 實戰指南:優雅編譯,高效開發
*1. Go Build 命令介紹1.1 基本語法格式Go 語言的 go build 命令用於編譯一個或多個 Go 源代碼文件,生成可執行文件或包。基本語法格式如下go build [標誌] [包名] 標誌:用於指定編譯時的選項和參數。 包名:可選,指定要編譯的包的路徑。如果省略包名,將編譯當前目錄下的所有 Go 源代碼文件。 go build 命令的工作原理包括以下步驟: 1. 分 ⌘ Read more

⤋ Read More

go run 命令核心技術詳解
*1. go run 命令簡介在 Go 語言開發中,go run 命令是一個非常常見且便捷的工具,它用於編譯並直接運行 Go 語言源代碼文件,而不需要生成可執行文件。本文將深入介紹 go run 的語法、常見用法實例、編譯命令行選項、注意事項,以及與 go build、go install 的區別和常見用途。2. go run 語法 go run 命令的基本語法爲:go run [文件名.go] ⌘ Read more

⤋ Read More

Go 測試的 20 個實用建議
2023 年 11 月初,Go 語言技術負責人 Russ Cox 在 GopherCon Australia 2023[1] 大會上進行了題爲 “Go Testing By Example”[2] 的演講:12 月初 Russ Cox 重新錄製了該演講內容的視頻,並在個人網站 [3] 上放了出來。這個演講視頻是關於如何編寫好的 Go 測試的,Russ Cox 介紹了 20 個實用建議,非常值得 G ⌘ Read more

⤋ Read More

Go 語言中的 nil 不相等問題
Go 語言作爲一門靜態類型的編程語言,提供了豐富的類型系統。在這個類型系統中,nil 扮演着空值的角色,類似於其他編程語言中的 null 或 None。然而,在 Go 中,對於 nil 的處理與其他語言有着本質的不同,這導致了一些獨特的行爲,尤其是在不同類型的 nil 比較時。什麼是 nil?——–在 Go 中,nil 是一個預聲明的標識符,它可以代表某些類型的零值。具體來說,下列類型的 ⌘ Read more

⤋ Read More

go clean 命令 完全解析
*1. go clean 命令介紹命令作用和使用場景在 Go 語言開發中,go clean 命令是一個強大的工具,用於清除與 Go 構建相關的文件和目錄。它通常在項目維護、優化和 CI/CD 任務中發揮重要作用。使用場景包括但不限於: 在提交代碼前,清理本地構建產物,確保提交的是源代碼而非編譯文件。 在項目重構或遷移時,清理舊有構建產物,避免與新的代碼混淆。 在 CI/CD 流程中, ⌘ Read more

⤋ Read More

使用 Gotify 來搭建你的消息推送系統
通過消息推送,我們可以實時的獲取有效的信息。比如結果,驗證碼以及一些重要的通知場景等。今天要分享的是 gotify,是一個用 go 編寫的消息服務端,也有客戶端,通過 gotify 我們可以簡單的進行收發消息。gotify 的 地址將會在文末展示。gotify 支持的功能如下可以通過 restapi 發送消息 可以通過 websocket 接收消息 可以管理用戶和客戶端以及應用程序 ⌘ Read more

⤋ Read More

Go 配置文件大揭祕:INI 文件讀寫實戰詳解
*1. INI 文件簡介INI(Initialization)文件是一種簡單、文本文件格式,常用於配置文件。它由多個節(section)組成,每個節包含多個鍵值對。鍵值對的格式爲 key=value,節的格式爲 [section]。簡單示例如下://  示例INI文件[database]host = localhostport = 3306username = userpassword = sec ⌘ Read more

⤋ Read More

tar 歸檔文件處理操作指南
*1. tar 文件的概述打包和壓縮多個文件在文件處理中,經常需要將多個文件打包成一個歸檔文件以便傳輸或存儲。tar 文件就是一種常見的歸檔文件格式,它能夠將多個文件和文件夾組織成一個單一的文件。結構簡單,跨平臺特性好Tar 文件採用簡單的文件組織結構,這種結構使得 tar 文件在不同操作系統之間具有很好的兼容性。Go 語言通過標準庫內置了對 tar 文件的支持,使得在 Go 中處理 tar 文件 ⌘ Read more

⤋ Read More

深入淺出內存管理:空間分配及逃逸分析
大家好,我是小❤,一個漂泊江湖多年的 985 非科班程序員,曾混跡於國企、互聯網大廠和創業公司的後臺開發攻城獅。引言—–內存管理,是開發者在程序編寫和調優的過程中不可繞開的話題,也是走向資深程序員必須要了解的計算機知識。有經驗的面試官會從內存管理的掌握程度去考察一個候選人的技術水平,這裏面涉及到的知識可能包括操作系統、計算機組成原理以及編程語言的底層實現等。說到內存,其實就是存儲器,我們可以 ⌘ Read more

⤋ Read More

基於 Go-Kit 的 Golang 整潔架構實踐
如何用 Golang 實現簡潔架構?本文介紹了基於 Go-Kit 實現簡潔架構的嘗試,通過示例介紹了簡潔架構的具體實現。原文: Why is Go-Kit Perfect For Clean Architecture in Golang?[1]簡介Go 是整潔架構 (Clean Architecture) 的完美選擇。整潔架構本身只是一種方法,並沒有告訴我們如何構建源代碼,在嘗試用新語言實現時 ⌘ Read more

⤋ Read More

基於 FX 構建大型 Golang 應用
Uber 開源的 FX 可以幫助 Go 應用解耦依賴,實現更好的代碼複用。原文: How to build large Golang applications using FX[1] 構建複雜的 Go 應用程序可能會引入很多耦合Golang 是一種流行編程語言,功能強大,但人們還是會發現在處理依賴關係的同時組織大型代碼庫很複雜。Go 開發人員有時必須將依賴項的引用傳遞給其他人,從而造成重用代碼 ⌘ Read more

⤋ Read More

手把手教你寫個自己的 protoc-gen-go
你是否用過 protobuf 或 gRPC? 你們公司項目的 API 有沒有用到 proto 文件? 本文將帶你一步一步寫個類似protoc-gen-go-grpc的 proto 文件生成工具,從 proto 文件生成兼容 Go 標準庫的 HTTP 框架代碼。掌握它之後,你就能隨心所欲的從 proto 文件生成gin、echo、net/http代碼,甚至生成你自己的框架代碼。 別擔心 ⌘ Read more

⤋ Read More

從 Go channel 中批量讀取數據
有時候批量積攢一批數據集中處理,是一個高效的提高程序性能的方法,比如我們可以批量寫入數據庫,批量發送消息到 kafka,批量寫入網絡數據等等。 批量把數據收集出來,我們常用 channel 類型,此時 channel 的功能就是一個 buffer, 多個生產者把數據寫入到 channel 中,消費者從 channel 中讀取數據,但是 Go 的 channel 並沒有提供批量讀取的方法,我們需要自 ⌘ Read more

⤋ Read More

Go 語言實現高性能分佈式鎖
在分佈式系統中,實現跨不同服務或節點的同步操作是一個常見的挑戰。分佈式鎖提供了一種有效的機制來確保在分佈式環境中只有一個進程或線程能執行特定的操作。本文將探討在 Go 語言環境中實現分佈式鎖的原理和方法,包括使用 Redis 和 Etcd 作爲鎖的存儲後端,並提供實際的代碼示例。分佈式鎖的基本概念———定義和用途分佈式鎖用於在不同的進程或系統間同步訪問共享資源。 它特別適用於分佈 ⌘ Read more

⤋ Read More

Go 處理二進制文件這麼簡單
*1. 概述1.1 爲什麼學習二進制文件讀寫Go 語言內置了豐富的文件操作函數,可以很方便地處理文本文件。但對於音視頻、圖像等二進制文件,文本文件函數就不太適用了。學習 Go 語言的二進制文件讀寫操作,可以更高效地處理這些非文本文件,在實際項目中也很常用。1.2 Go 語言處理二進制文件的優勢Go 語言處理二進制文件具有以下優勢 1. 性能高,讀寫速度快 2. 支持跨平臺,代碼可以在多 ⌘ Read more

⤋ Read More

在 golang 中如何實現 WebSocket 的雙向通信
在 Go 語言中實現 WebSocket 的雙向通信通常需要使用第三方庫,其中 gorilla/websocket 是一個非常流行和廣泛使用的庫。以下是實現 WebSocket 雙向通信的步驟和簡單示例代碼:1 安裝 gorilla/websocket 庫:go get github.com/gorilla/websocket2 編寫 WebSocket 服務器:package mainimpor ⌘ Read more

⤋ Read More

將 go 代碼打包成 docker 鏡像
概述–在本教程中,你將生成一個容器映像。該映像包括運行應用程序所需的一切:編譯的應用程序二進制文件、運行時、庫以及應用程序所需的所有其他資源。前置條件—-若要完成本教程,需要滿足以下條件:golang 1.19+ 本地安裝了 docker Git 客戶端 程序–該應用程序提供兩個 HTTP endpoint:/ 返回符號 < 3 /health 返回 {“Statu ⌘ Read more

⤋ Read More

grpc-go 從使用到實現原理全解析!
前言–本期將從 rpc 背景知識開始瞭解,如何安裝進行開發前的環境準備,protobuf 文件格式瞭解,客戶端服務端案例分享等,逐漸深入瞭解如何使用 grpc-go 框架進行實踐開發。背景知識瞭解——rpcrpc(Remote Procedure Call)遠程過程調用協議,採用的是客戶端 / 服務端模式,常用於微服務架構,通過網絡從遠程計算機上請求服務,而不需要了解底層網絡技術的協議, ⌘ Read more

⤋ Read More

使用 Go 構建高性能的事件管理器
事件驅動編程是一種編程範式,在這種範式下,程序的執行流由外部事件(如用戶操作、傳感器輸出或消息傳遞)來決定。在 Go 語言中,構建一個事件管理器可以幫助我們更好地組織和處理這些事件。本文將詳細探討如何在 Go 語言中創建和使用事件管理器,包括事件的定義、監聽和觸發,提供豐富的示例來指導你構建自己的事件驅動應用。Golang 事件管理器概述————–事件驅動編程的優勢解耦:減少組件 ⌘ Read more

⤋ Read More

Gob 實踐全攻略,數據傳輸利器
*1. Gob 簡介1.1 Gob 概述Gob(Go binary)是 Go 語言中用於序列化和反序列化數據的編碼庫。它是 Go 語言的標準庫之一,專門設計用於在 Go 程序之間高效地傳輸數據。Gob 可以將複雜的數據結構編碼成二進制格式,便於在不同系統之間傳遞,並支持版本控制和演進。1.2 爲什麼選擇 GobGob 相比其他序列化格式(如 JSON、XML)具有更高的性能和更小的數據體積。它是專 ⌘ Read more

⤋ Read More

Go: XML 文件的讀寫操作詳解
*概述XML(可擴展標記語言)作爲一種常見的數據交換格式,廣泛應用於配置文件、數據傳輸等場景。本文將介紹如何在 Go 語言 中進行 XML 文件的讀寫操作,涵蓋 XML 基礎知識、編碼 / 解碼基礎、讀取 XML 文件、寫入 XML 文件、實戰操作示例以及 XML 與 JSON 對比選型。一、XML 基礎知識簡介XML 語法結構XML 採用標籤(tag)來標記數據,具有自我描述性。一個基本的 XM ⌘ Read more

⤋ Read More

使用 gorm-Scopes 函數複用查詢邏輯
今天要學習的是gorm.Scopes函數的使用。該函數的作用就是複用查詢條件。gorm Scopes 是什麼—————在項目中,你一定會遇到過很多需要複用的查詢條件。比如常用的場景有分頁、查詢時判定數據權限等操作。比如,我們有兩個數據資源:用戶列表和部門列表。那麼,在查詢列表的時候都會涉及到分頁。當然可以在每個列表中都增加上列表相關的查詢。同時,也可以將分頁的查詢抽取出來,做成 ⌘ Read more

⤋ Read More

Go 語言爲什麼很少使用數組?
01 介紹在 Go 語言中,數組是一塊連續的內存,數組不可以擴容,數組在作爲參數傳遞時,屬於值傳遞。數組的長度和類型共同決定數組的類型,不同類型的數組之間不可以比較,否則在編譯時會報錯。因爲數組的一些特性,我們在 Go 項目開發中,很少使用數組。本文我們介紹一下數組的特性。02 數組聲明方式在 Go 語言中,數組的聲明方式有三種。示例代碼:func main() { var arr1 [2]int ⌘ Read more

⤋ Read More

Go JSON 文件讀寫最佳實踐
*概述在 Go 語言中,JSON(JavaScript Object Notation)是一種常見的數據交換格式,用於在不同語言之間進行數據傳遞。本文將介紹 Go 語言中如何進行 JSON 文件的讀寫操作,包括解析與序列化,錯誤處理,以及一些實用技巧。一、JSON 文件基礎操作JSON 文件的讀取如何從 JSON 文件中讀取數據。package mainimport ( “encoding/js ⌘ Read more

⤋ Read More

每個 Go 程序員必犯之錯
說起每個程序員必犯的錯誤,那還得是 “循環變量” 這個錯誤了,就連 Go 的開發者都犯過這個錯誤,這個錯誤在 Go 的 FAQ 中也有提到 What happens with closures running as goroutines?[1]:func main() {    var wg sync.WaitGroup    values := []string{“a”, ”b”, ”c”} ⌘ Read more

⤋ Read More

Go map 讀寫性能優化 - 分片 map
基本在所有的編程語言中,都有 map 這種數據結構,Go 語言也不例外。我們知道 Go 是一門對併發支持得比較好的語言,但是 map 並不支持併發讀寫。比如,下面這種寫法是錯誤的:var m = make(map[int]int)var wg sync.WaitGroupwg.Add(2)// 啓動兩個協程序同時寫入 mapgo func() {    for i := 0; i < 100; i ⌘ Read more

⤋ Read More

Go IsNil– 和 IsValid– 的精妙運用
*概述在 Go 語言中,反射是一項強大的特性,而 IsNil() 和 IsValid() 函數則是 reflect 包中兩個重要的函數,用於處理接口、通道、函數等各種類型。本文將深入介紹這兩個函數,解釋它們的用途、實際應用場景,並通過通俗易懂的例子更好地理解這兩個函數的神奇之處。一、IsNil() 函數判斷指針和接口是否爲 nilpackage mainimport ( “fmt” “refl ⌘ Read more

⤋ Read More

go-elasticsearch 使用指南
本文是 go-elasticsearch 庫的使用指南。go-elasticsearch 是 Elasticsearch 官方提供的 Go 客戶端。每個 Elasticsearch 版本會有一個對應的 go-elasticsearch 版本。官方會維護最近的兩個主要版本。go-elasticsearch 提供了 Low-level 和 Fully-typed 兩套 API。本文以 Fully-ty ⌘ Read more

⤋ Read More

Go 反射掌握指南:函數調用篇
*概述Go 語言的反射機制賦予了動態調用函數的能力。本文將介紹如何通過反射調用函數,以及基本函數、帶參函數、帶返回值函數等多種場景。一、獲取函數的反射對象獲取函數的反射對象package mainimport ( “fmt” “reflect”)// 定義一個示例函數func ExampleFunction(name string, age int) { fmt.Printf(“Hello, ⌘ Read more

⤋ Read More

Templ - 一種更好的管理 HTML 模板的 Go 語言框架
背景介紹在開發 Web 應用時我們常常需要寫 HTML 代碼以構建用戶界面。然而,創建和管理 HTML 模板可能會變得非常複雜和困難,特別是在大型項目中。要優化並整理這些模板代碼,我們需要一個強大且易於使用的模板語言。這種需求在使用 Go 語言開發 Web 應用時尤爲突出,因爲 Go 語言在內建支持的模板語言方面還不夠友好,尚有待提升。今天要給大家推薦一個 GitHub 開源項目 a-h/temp ⌘ Read more

⤋ Read More

Go 反射修改變量值全攻略
*概述Go 語言的反射機制爲提供了一種強大的方式來檢查和修改變量的值。本文將介紹如何通過反射修改變量的值,包括基本類型、結構體、切片等各種場景。一、反射對象獲取變量的反射對象package mainimport ( “fmt” “reflect”)func main() { // 定義一個整數變量 num := 42 // 使用reflect.ValueOf獲取反射對象 value : ⌘ Read more

⤋ Read More

Go 深度解析 ValueOf– 與 Value 的神奇魔法
*概述Go 語言中,反射機制提供了強大的工具,其中的 reflect 包中的 ValueOf() 和 Value 函數是反射的基礎。本文將介紹這兩個函數的作用機制,探討其在接口值轉換、參數傳遞規律等方面的實際運用。一、ValueOf 函數作用機制package mainimport ( “fmt” “reflect”)func main() { // 使用 ValueOf 獲取接口值的反射對 ⌘ Read more

⤋ Read More

Go 語言控制協程 -goroutine- 的併發數量,有哪些好的解決方法
在使用協程併發處理某些任務時, 其併發數量往往因爲各種因素的限制不能無限的增大. 例如網絡請求、數據庫查詢等等。從運行效率角度考慮,在相關服務可以負載的前提下(限制最大併發數),儘可能高的併發。在 Go 語言中,可以使用一些方法來控制協程(goroutine)的併發數量,以防止併發過多導致資源耗盡或性能下降。以下是一些常見的方法:1. 使用信號量(Semaphore):可以使用 Go 語言中的 c ⌘ Read more

⤋ Read More