Searching txt.sour.is

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

Go 實現多租戶示例
在 Go 中實現多租戶 (multi-tenancy) 通常涉及到下面幾個關鍵步驟:租戶識別: 你需要一個機制來區分請求是針對哪個租戶的。這可以通過多種策略實現,比如在 HTTP 請求的 URL、Header 或者是 Cookie 中嵌入租戶 ID。 數據隔離: 根據你選擇的數據隔離策略(如數據庫、schema 或者數據表的隔離),你需要確保租戶只能訪問到屬於他們的數據。 中間件 / ⌘ Read more

⤋ Read More

Go Gin 框架實現優雅地重啓和停止
在 Web 應用程序中,有時候我們需要重啓或停止服務器,無論是因爲更新代碼還是進行例行維護。在這種情景下,我們需要保證應用程序的可用性和數據的一致性。這就需要優雅地關閉和重啓應用程序,即不丟失正在處理的請求和不拒絕新的請求。在本文中,我們將詳解如何在 Go 語言中使用 Gin 這個框架實現優雅的重啓和停止。什麼是優雅重啓和停止———-優雅地重啓或停止一個 Web 服務就是指當我們需要更 ⌘ Read more

⤋ Read More

史上最詳細的 Gin 中間件使用教程
在本文中,我們將深入討論 Go-Gin 的中間件,詳細瞭解它們呈現如何有效地在任何特定的 Web 應用程序中插播操作。此外,我們還將瀏覽一些示例,幫助大家更好地理解。什麼是中間件?——-在討論 Gin 中間件之前,首先我們需要明確中間件的概念。中間件基本上是一個函數,它在您的應用程序收到請求和發送響應之間插播處理。在實際開發中,中間件被廣泛用於處理如日誌記錄、身份驗證、會話管理等方面。Gi ⌘ Read more

⤋ Read More

圖文講透 Golang 標準庫 net-http 實現原理 – 服務端
前言今天分享下 Go 語言 net/http 標準庫的內部實現邏輯,文章將從客戶端 (Client)– 服務端(Server) 兩個方向作爲切入點,進而一步步分析 http 標準庫內部是如何運作的。由於會涉及到不少的代碼流程的走讀,寫完後覺得放在一篇文章中會過於長,可能在閱讀感受上會不算很好,因此分爲【Server–Client 兩個篇文章】進行發佈。本文內容是【服務端 Server 部分】, ⌘ Read more

⤋ Read More

Go 司空見慣的錯誤檢測,原來還有這麼多幹貨-
*一、錯誤處理機制Go 語言以結果多值返回方式處理錯誤, 函數或者方法最後一個返回值作爲錯誤類型。func ReadFile(filename string) ([]byte, error)調用時根據錯誤值判斷是否正常data, err := ReadFile(“abc.txt”)if err != nil { // 處理錯誤} else { // 處理data}error 類型及其意義 ⌘ Read more

⤋ Read More

ebpf-go 初體驗
前言我們在《用 eBPF/XDP 來替代 LVS》系列、《一張圖感受真實的 TCP 狀態轉移》系列,以及《如何終結已存在的 TCP 連接?》系列文章中,均通過純 C 語言和 libbpf1 這個庫來運用 eBPF。但是很多的場景中(尤其是雲原生場景),我們出於避免重複造輪子、更快的迭代速度、運行時安全等原因,會選擇 go 語言來進行開發,ebpf-go2 這個庫就是當前最好的選擇。今天,我們就對 ⌘ Read more

⤋ Read More

Go 使用 cmux 實現網絡端口複用
cmux 的作用——– 一般情況下, 每個端口只能爲一個服務所用, 如果複用, 會報 “port is already in use”如果需要複用某個端口, 那麼可以使用 cmux 來實現 (其實大多數情況下必要性不大. 比如我就圖 8888 端口吉利, http/grpc 等服務都用這個端口)cmux[1] 全稱 Connection Mux, 是 Go 生態來複用端口的庫, 可 ⌘ Read more

⤋ Read More

Go 信號 - 守護進程開發爬坑指南
*一、信號 (signal) 處理信號是 Linux 系統下進程間通信的一種限制式異步通知機制。一個信號可以傳遞一個事件通知給一個進程, 代表一個異步事件。Go 語言內置了對信號的支持, 通過 os/signal 包可以實現 Go 程序對信號的處理。1.1 什麼是信號信號 (Signal) 是 Linux 系統下進程間通信的一種方式。當某個事件發生時, 內核會通知進程一個信號。進程接收到信號後, ⌘ Read more

⤋ Read More

Go 一文帶你喫透 HTTP 客戶端!
*1. HTTP 請求簡介HTTP(Hypertext Transfer Protocol) 是構建 web 應用通信的基石。HTTP 工作於客戶端 - 服務端架構上。HTTP 客戶端發起請求, 服務器接收請求並返回響應。HTTP 請求主要由請求行、請求頭、請求體組成請求行 GET /search?name=Golang HTTP/1.1請求頭部 Host: www.baidu ⌘ Read more

⤋ Read More

Go 定時器:Timer 和 Ticker
前言在日常開發中,我們可能會遇到需要延遲執行或週期性地執行一些任務。這個時候就需要用到 Go 語言中的定時器。在 Go 語言中,定時器類型有兩種:time.Timer 一次性定時器和 time.Ticker 週期性定時器。本文將會對這兩種定時器類型進行介紹。準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究竟吧。Timer:一次性定時器Timer 是一個一次性的定時器,用於在未來的某一時刻執行 ⌘ Read more

⤋ Read More

千萬級高性能長連接 Go 服務架構實踐
作者 | glstr導讀 introduction移動互聯網時代,長連接服務成爲了提升應用實時性和互動性的基礎服務。本文主要介紹了百度系內基於 golang 實現的統一長連接服務。主要從統一長連接功能實現和性能優化等角度,描述了統一長連接服務在設計、開發和維護過程中面臨的問題和挑戰,重點介紹瞭解決相關問題和挑戰的解決方案和實踐經驗。01摘要移動互聯網時代,用戶對服務的實時性、互動性有了更高的要求, ⌘ Read more

⤋ Read More

Go 語言實戰:構建強大的延遲任務隊列
01 介紹延遲隊列是一種數據結構,用於處理需要在未來某個特定時間執行的任務。這些任務被添加到隊列中,並且指定了一個執行時間,只有到達指定的時間點時才能從隊列中取出並執行。在實際應用中,延遲隊列可以用於處理各種需要延遲處理的任務,例如發送郵件提醒、訂單自動取消、對超時任務的處理等。由於任務的執行是在未來的某個時間點,因此這些任務不會立即執行,而是存儲在隊列中,直到它的預定執行時間纔會被執行。02 S ⌘ Read more

⤋ Read More

基於 go 實現 lsm tree 之主幹框架
0 導讀去年 4 月的時候,我和大家分享了一篇文章——初探 rocksDB 之 lsm tree,和大家一起探討了 lsm tree 結構的底層實現原理. 秉着 【基於源碼支撐原理】 的一貫原則,從本期開始,咱們把源碼篇的坑填上.接下來我將開啓一個新的專題——基於 go 語言從零到一實現 lsm tree,本專題共分爲下述四篇內容:• 基於 go 實現 lsm tree 之主幹框架(本篇) ⌘ Read more

⤋ Read More

Go 語言與 gRPC 的完美結合
*一、gRPC 簡介gRPC(Remote Procedure Call) 是一種遠程過程調用技術, 通過壓縮和序列化數據來優化網絡通信, 可以顯著提高服務調用的性能和效率。gRPC 的概念gRPC 是一個高性能、通用的開源 RPC 框架, 是一個由 Google 主導開發的 RPC 框架。其以 HTTP/2 爲基礎通信協議, 支持多種語言, 通過 protocol buffers 數據格式來實現 ⌘ Read more

⤋ Read More

Go 調用 C– 動態庫實現車牌識別
前言—–很久沒更新博客,這次正好趁着這次機會來更新一個稍微有點意思的內容,利用 C++ 中 Opencv、TensorRT 等庫編譯出動態庫供 Go 調用,再寫個簡單的 api 對上傳的車輛圖片進行車牌識別。究其原因,天下苦 Java 久矣,每次寫 JNI 去給公司 Java 後端服務調用,而我不喜歡 Java 那我每次寫好的模型動態庫就到此爲止了?白白浪費之前那麼多計算資源於心不忍,因此打 ⌘ Read more

⤋ Read More

Go 插件機制詳解:原理、設計與最佳實踐
*1. Go 語言插件基礎1.1 插件概述插件是一種動態加載的代碼單元, 它可以在程序運行期間被動態加載和掛接到主程序上, 從而擴展主程序的功能。Go 語言從 1.8 版本開始, 通過 plugin 包提供了對插件的初步支持。利用插件, 可以在不需要重新編譯主程序的情況下, 動態地擴展主程序的功能, 做到高內聚低耦合。1.2 插件的定義和結構從實現上看, Go 語言的插件就是一個獨立編譯的 dyn ⌘ Read more

⤋ Read More

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
In-reply-to » man... day17 has been a struggle for me.. i have managed to implement A* but the solve still takes about 2 minutes for me.. not sure how some are able to get it under 10 seconds.

So, I finally got day 17 to under a second on my machine. (in the test runner it takes 10)

I implemented a Fibonacci Heap to replace the priority queue to great success.

https://git.sour.is/xuu/advent-of-code/src/branch/main/search.go#L168-L268

⤋ Read More

How to Install macOS Sonoma in a Virtual Machine with UTM
You can install and run macOS Sonoma in a virtual machine, for free, with the use of UTM. UTM runs on Macs, iPhones, and iPads, but we’re going to focus specifically on installing macOS Sonoma in a UTM virtual machine running on a Mac. Yes this means you can run a virtualized macOS Sonoma installation … Read MoreRead more

⤋ Read More

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

⤋ Read More

4 Great Free Menubar Apps for Mac You Should Check Out
One way you can improve your Mac experience is by adding some handy tools and items to your Mac menubar item. And, coincidentally, some of the best free utilities available for Mac, are also menubar items. We’re going to cover four of the best free menubar apps for Mac, which are sure to improve not … Read MoreRead 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

How to Copy Pictures from iPhone to PC Without iCloud
If you have an iPhone with iCloud, and you also have a Windows PC that does not have iCloud setup, you may still want to copy the pictures off of the iPhone to the PC. This is a common situation that not everyone is familiar with, so we’re going to take the opportunity to demonstrate … Read MoreRead 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

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
In-reply-to » @xuu That was one of the horror puzzles where I had to look for help. 🥴 I modelled my solution after this: https://www.youtube.com/watch?v=2pDSooPLLkI (I can’t explain it better than the video anyway.) It takes a second on my machine and that’s with my own hashmap implementation which is probably not the fastest one.

OH MY FREAKING HECK. So.. I made my pather able to run as Dijkstra or A* if the interface includes a heuristic.. when i tried without the heuristic it finished faster :|

So now to figure out why its not working right.

⤋ 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

man… day17 has been a struggle for me.. i have managed to implement A* but the solve still takes about 2 minutes for me.. not sure how some are able to get it under 10 seconds.

Solution: https://git.sour.is/xuu/advent-of-code/src/branch/main/day17/main.go
A* PathFind: https://git.sour.is/xuu/advent-of-code/src/branch/main/search.go

some seem to simplify the seen check to only be horizontal/vertical instead of each direction.. but it doesn’t give me the right answer

⤋ Read More

Experiment & Explore with Fedora Linux on Mac with UTM
Running Linux on a Mac can be a big ordeal, but not with virtualization. By using UTM, you can run Linux in a virtual machine atop MacOS, contained entirely within an app. This allows you to explore and experiment with Linux, without having to go through any complex installation process or setup, it’s just a … Read MoreRead 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

基於 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
In-reply-to » We went to the cinema tonight, was really nice to be there and see a movie with the kids :) We saw a classic Norwegian Christmas movie - a new movie in the 'Jul i skomakergata' series.

@prologic@twtxt.net Ah, they have that here too, couches and such, you pay extra for that. But they have 5 halls, and we went to the smallest one. Luckily not sitting next to anyone sick :) haha, but yeah, it crossed my mind.. Have not caught anything recently, and a bit risky to go to packed places right before Christmas, but it went fine this time :)

⤋ 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

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

I fell with a stupid e-scooter and have been waiting at the hospital now for more than three hours. Not worth it. I almost broke my left elbow and right hand wrist. Got lucky because I was wearing a helmet. Not going to try that again. The wheels slipped on the wet zebra crossing paint in a turn.

⤋ Read More

Today’s Advent of Code puzzle was rather easy (luckily), so I spent the day doing two other things:

  • Explore VGA a bit: How to draw pixels on DOS all by yourself without a library in graphics mode 12h?
  • Explose XMS a bit: How can I use more than 640 kB / 1 MB on DOS?

Both are … quite awkward. 😬 For VGA, I’ll stick to using the Borland Graphics Interface for now. Mode 13h is great, all pixels are directly addressable – but it’s only 320x200. Mode 12h (640 x 480 with 16 colors) is pretty horrible to use with all the planes and what not.

As per this spec, I’ve written a small XMS example that uses 32 MB of memory:

https://movq.de/v/9ed329b401/xms.c

It works, but it appears the only way to make use of this memory is to copy data back and forth between conventional memory and extended memory. I don’t know how useful that is going to be. 🤔 But at least I know how it works now.

Image

⤋ 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

Go 的分佈式應用:使用 Raft 算法
大家好!我是 [lincyang]。今天我們要探討的是如何在 Go 語言中使用 Raft 算法來構建分佈式應用。什麼是 Raft 算法?————Raft 算法是一種用於管理分佈式系統中的複製日誌的一致性算法。它的主要目標是簡化分佈式系統的構建和理解。爲什麼使用 Raft?———–Raft 算法相對於其他分佈式一致性算法(如 Paxos)來說,更易於理解和實現,同時也具 ⌘ Read more

⤋ Read More

老外總結的 14 條 Go 接口最佳實踐,有些不一樣
最近幾個月,沒事喜歡看看老外寫的技術文章,發現他們的一些思考維度真的有些不太一樣。當然,他們寫的文章大多數沒有國內的那麼卷。今天這篇文章是關於 Go 語言中接口設計的一些最佳實踐,與 Java 等語言不盡相似,但又帶着 Go 語言的特色,可以對照學習,拓展編程思想層面的認知面。以下是在 Go 中使用接口的一些最佳實踐:1、優先小接口:接口是 Go 中的強大工具,但要保持它們小巧並專注於特定任務。這 ⌘ Read more

⤋ Read More

Go 標籤實踐手冊,結構體標籤應用全攻略
*概述結構體標籤,作爲 Go 語言中獨有的元信息機制,提供了在運行時對結構體字段進行註釋和標記的能力。本文將介紹 Go 語言中結構體標籤的概念、自定義創建和處理、應用場景、標籤信息查詢以及代碼生成場景應用,帶讀者深入瞭解結構體標籤的細節和最佳實踐。一、結構體標籤概念標籤定義和格式解析package mainimport ( “fmt” “reflect”)// 定義一個包含標籤的結構體type ⌘ Read more

⤋ Read More

Go 的事件驅動編程:使用 EventBus 實現
大家好!我是 [lincyang]。今天我們要探討的是 Go 語言中的事件驅動編程,特別是如何使用 EventBus 來實現這一目標。什麼是事件驅動編程?———-事件驅動編程是一種編程範式,其中應用程序的流程由外部事件(如用戶輸入或系統觸發的事件)來控制。這種方法在 GUI 應用、網絡編程和實時系統中尤爲常見。爲什麼選擇 EventBus?—————EventBus ⌘ Read more

⤋ Read More

When is most of humanity going to realise that we’re all stuck on the same space vessel, hurling to the vast and empty space together, and have limited resources that cannot be replenished from some other planet.

⤋ Read More
In-reply-to » @movq It took a little over a minute on my machine.. i should try to make it multi threaded.. 🤔

All brute force.

Its the latest ryzen 7 chipset for laptop/mini form factor.

I am very surprised about the times others are getting. I guess that’s the difference between interpreted and compiled showing.

⤋ Read More

Go 項目的簡單部署
概述–在上一篇筆記記錄了 Gin 實現簡單的註冊登錄和狀態管理。這一篇筆記來分享一下如何將上面的項目打包鏡像和部署,筆記分成三部分,分別是 Web 後端項目 Docker 鏡像的構建、使用 Docker 運行、使用 Docker Compose 和 k8s 部署容器。使用 Ingress 路由規則和 Web 前端的部署運行在下一篇筆記中記錄。構建 Docker 鏡像————概述構 ⌘ Read more

⤋ Read More

Go 反射機制揭祕:輕鬆獲取結構體成員類型
*概述Go 語言的反射機制提供了強大的工具,使得在運行時獲取結構體的成員類型成爲可能。本文將介紹如何用反射實現結構體成員類型的獲取,包括結構字段的遍歷、按名稱訪問結構成員、處理匿名字段及內嵌類型,以及解析字段標籤元信息的方法。一、結構字段遍歷值對象及類型對象package mainimport ( “fmt” “reflect”)type User struct { ID int Na ⌘ Read more

⤋ Read More

介紹 Agency: 使 AI 與 Go 語言無縫對接
在當今應用開發領域,類似 OpenAI API 等生成式 AI 技術的蓬勃發展正在徹底改變着應用開發的格局。Python 和 JavaScript 等語言已經擁有豐富的資源來支持這些技術,其中 LangChain 就是一個顯著的例子。然而,Go 語言開發者面臨的選擇卻相對有限。LangChainGo,作爲 LangChain 的 Go 語言版本,一直在努力與 Go 的編程理念保持一致,而 Lang ⌘ Read more

⤋ Read More

Go 反射深度揭祕之 reflect-Elem– 方法解析
*概述Go 語言中的反射機制提供了強大的工具,能夠在運行時獲取和操作變量的信息。其中,reflect.Elem() 方法是一個重要的利器,通過它能夠獲取指針指向的元素類型,提供更多的靈活性。本文將解析 reflect.Elem() 的方法簽名、作用機制,並通過豐富的示例演示其調用方式。一、Elem() 方法解析方法簽名func (v Value) Elem() ValueElem() 方法是 re ⌘ Read more

⤋ Read More

2023 年 Go 併發庫的變化
2023 年來, Go 的併發庫又有了一些變化,這篇文章是對這些變化的綜述。小細節的變化,比如 typo、文檔變化等無關大局的變化就不介紹了。sync.Once———Go 1.21.0 中增加了和 Once 相關的三個函數,便於 Once 的使用。func OnceFunc(f func()) func()func OnceValueT any T) func() Tfunc Once ⌘ Read more

⤋ Read More

Go 反射之 reflect-TypeOf– 和 reflect-Type
*概述在 Go 語言中,反射是一項強大的特性,它允許程序在運行時動態獲取變量的類型信息,進行類型操作與轉換,甚至能夠對結構體和函數進行反射操作。本文將探討 reflect.TypeOf() 和 reflect.Type,揭示 Go 語言 中反射的奧祕。一、reflect.TypeOf() 函數返回反射 Type 對象reflect.TypeOf() 函數用於獲取一個變量的反射 Type 對象。它接 ⌘ Read more

⤋ Read More