# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 2879
# self = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=2179
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=2279
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=2079
TCP 基礎詳解:Telnet 迴音服務器搭建**
\*概述Telnet 迴音服務器是一個簡單而實用的網絡應用,通過 Telnet 協議連接,用戶輸入什麼,服務器就回顯什麼。本文將介紹如何使用 Go 語言創建一個 Telnet 迴音服務器,通過完整的示例代碼和詳細註釋,便於理解 TCP 服務器的基本結構和實現。1. TCP 服務器基礎TCP 協議簡介package mainimport ("fmt""net")func main() { liste ⌘ Read more
*
無縫集成 GORM 與 Go Web 框架**
探索 GORM 與流行的 Go Web 框架之間的和諧集成,以實現高效的數據管理----------------------------------------高效的數據管理是每個成功的 Web 應用程序的基礎。GORM,多才多藝的 Go 對象關係映射庫,與流行的 Go Web 框架非常搭配,提供了無縫集成,簡化了數據交互。本指南將帶您探索 GORM 與諸如 Gin、Echo 和 Beego 等 ⌘ Read more
Go 語言中的反射機制**
在 Go 語言的衆多高級特性中,反射(Reflection)是一個強大且複雜的概念。它使得程序能夠在運行時檢查、修改其自身結構。反射在處理接口和類型斷言、開發通用功能或者設計框架時尤爲重要。本文將深入探索 Go 語言中的反射機制,通過具體的示例展示如何使用 reflect 包,讓你能夠在 Go 項目中有效地利用這一強大的工具。Go 反射基礎-------反射的概念反射是指計算機程序在運行時(run ⌘ Read more
使用 Go 語言創建自己的密碼加密工具**
Go 語言藉助它的簡單性和強大的標準庫,實現一個自己的密碼加密工具非常簡單。在本篇文章中,我們將會結合代碼示例深入探討如何使用 Go 語言的 crypto 包來實現自己的加密工具。首先,我們需要 import 必要的包:package mainimport (    "crypto/aes"    "crypto/cipher"    "crypto/rand"    "fmt"    "io") ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之併發(channel)**
前言--Hi,大家好,我是碼農,星期八,本篇繼續帶來 Go 語言併發基礎,channel 如何使用。看看 Go 協程如何配合 channel。快來上車叭。爲什麼需要 channel-------------channel 在 Go 中,也叫做管道,是用來多線程之間共享數據的。通常情況下,在 Go 中共享數據用的也是channel,但是在 Go 有兩種共享數據方式。共享內存實現通訊。 通過管道 ⌘ Read more
Go 淺析主流日誌庫:從設計層學習如何集成日誌輪轉與切割功能**
前言在現有的日誌庫中,包括 go 1.21.0 引入的 slog 日誌庫,它們通常都支持對日誌文件進行輪轉與切割,只不過這些功能並不直接被內置,而是需要我們主動配置來啓用。本文將探討幾個熱門的日誌庫如 logrus、zap 和官網的 slog,我將分析這些庫的的關鍵設計元素,探討它們是如何支持日誌輪轉與切割功能的配置。 淺析 logrus、zap 和 slog 的設計在對 logrus、zap 和 ⌘ Read more
一文搞懂 Go gRPC 服務 Handler 單元測試**
在雲原生時代和微服務架構背景下,HTTP 和 RPC 協議成爲服務間通信和與客戶端交互的兩種主要方式。對於 Go 語言而言,標準庫提供了 net/http/httptest 包,爲開發人員提供了便捷的方式來構建服務端 HTTP Handler 單元測試的測試腳手架代碼,而無需真正建立 HTTP 服務器,讓開發人員可以聚焦於對 Handler 業務邏輯的測試。比如下面這個示例:// grpc-tes ⌘ Read more
Go: select 實戰指南:協程切換技術**
概述Go 語言的併發編程模型以其簡潔而強大的 goroutine 爲特色。而 select 語句則是在多個通信操作中選擇一個執行的關鍵工具。本文將討論如何使用 select 切換協程,通過清晰的示例代碼,幫助讀者掌握這一重要的併發編程技巧。select 語句的基本結構package mainimport ( "fmt" "time")func main() { ch1 := make(chan s ⌘ Read more
=
Go 語言讀取 YAML 配置文件教程**
在 Go 語言項目中,處理配置文件是一項常見的任務。YAML 是一種易讀易寫的配置文件格式,本教程將指導你如何在 Go 中讀取和解析 YAML 文件。我們將按照章節的形式逐步介紹相關的概念和示例代碼。第一章:引入依賴--------在開始之前,我們需要引入一個 YAML 解析的第三方庫。推薦使用 gopkg.in/yaml.v2。go get gopkg.in/yaml.v2第二章:創建 YAML ⌘ Read more
Go 打造高效的聊天系統**
\\*概述構建一個高效的 Go 語言聊天服務器是一個具有挑戰性而又令人興奮的任務。本文將通過示例代碼和註釋,逐步實現一個功能強大的 Go 語言聊天服務器。通過清晰的項目結構和合理的邏輯劃分,將能夠理解服務器的設計和實現。1. 項目規劃與結構設計1.1 項目規劃在開始構建聊天服務器之前,需要進行項目規劃。明確通信協議、確定服務器功能和定義用戶管理方式是關鍵步驟。1.2 結構設計設計一個清晰的結構是確保項 ⌘ Read more
*
Go 打造高效的聊天系統**
\*概述構建一個高效的 Go 語言聊天服務器是一個具有挑戰性而又令人興奮的任務。本文將通過示例代碼和註釋,逐步實現一個功能強大的 Go 語言聊天服務器。通過清晰的項目結構和合理的邏輯劃分,將能夠理解服務器的設計和實現。1. 項目規劃與結構設計1.1 項目規劃在開始構建聊天服務器之前,需要進行項目規劃。明確通信協議、確定服務器功能和定義用戶管理方式是關鍵步驟。1.2 結構設計設計一個清晰的結構是確保項 ⌘ Read more
*
Go 語言 CSP 編程實戰:通道通信技術**
\*概述通信順序進程(Communicating Sequential Processes,CSP)是一種併發編程的形式化理論,由計算機科學家 Tony Hoare 於 1978 年提出。在 Go 語言中,CSP 被廣泛應用,通過通道(Channel)實現了簡單且強大的併發模型。本文將介紹 Go 語言中的 CSP 概念,通過詳細的示例代碼和註釋,理解 CSP 的運作原理和在 Go 中的實現。1. C ⌘ Read more
*
Go 語言 CSP 編程實戰:通道通信技術**
\\*概述通信順序進程(Communicating Sequential Processes,CSP)是一種併發編程的形式化理論,由計算機科學家 Tony Hoare 於 1978 年提出。在 Go 語言中,CSP 被廣泛應用,通過通道(Channel)實現了簡單且強大的併發模型。本文將介紹 Go 語言中的 CSP 概念,通過詳細的示例代碼和註釋,理解 CSP 的運作原理和在 Go 中的實現。1. C ⌘ Read more
*
從 Discord 的做法中學習 — 使用 Golang 進行請求合併**
正如你可能之前看到的,Discord 去年發佈了一篇有價值的文章,討論了他們成功存儲了數萬億條消息。雖然有很多關於這篇文章的 YouTube 視頻和文章,但我認爲這篇文章中一個名爲 “數據服務爲數據服務” 的部分沒有得到足夠的關注。在這篇文章中,我們將討論 Discord 對數據服務的方法,並探討如何利用 Golang 的併發特性來減少特定情況下的數據庫負載。數據服務拯救熱分區如你所知,消息和頻道 ⌘ Read more
Go 排序算法探祕:打造通用 qsort 函數**
\*概述快速排序(QuickSort)是一種經典的排序算法,其高效性和廣泛應用使之成爲計算機科學領域的瑰寶。本文將介紹如何在 Go 語言中封裝快速排序函數,使其更易用、更具通用性,並通過示例和代碼解釋,讓讀者深入瞭解其原理和實現。1. 快速排序算法簡介1.1 算法原理快速排序是一種分治策略的排序算法,基本思想是通過選定一個基準元素。將序列分爲兩部分,小於基準的元素放在左邊,大於基準的元素放在右邊,然 ⌘ Read more
*
Go 排序算法探祕:打造通用 qsort 函數**
\\*概述快速排序(QuickSort)是一種經典的排序算法,其高效性和廣泛應用使之成爲計算機科學領域的瑰寶。本文將介紹如何在 Go 語言中封裝快速排序函數,使其更易用、更具通用性,並通過示例和代碼解釋,讓讀者深入瞭解其原理和實現。1. 快速排序算法簡介1.1 算法原理快速排序是一種分治策略的排序算法,基本思想是通過選定一個基準元素。將序列分爲兩部分,小於基準的元素放在左邊,大於基準的元素放在右邊,然 ⌘ Read more
*
Go 語言項目命名規範(2023 年最新版)**
在 Go 語言中,良好的命名規範是構建清晰、可讀和可維護代碼的關鍵。本指南旨在幫助你制定一致的命名規範,使你的 Go 項目更加整潔和易於理解。在實際項目開發中,每個項目組的成員開發習慣不一樣,可能會有自己的一些規範,所以這個規範僅供參考。第一章:包命名規範在 Go 中,包是代碼組織的基本單元。包名應該簡短而具有描述性。使用小寫字母: 包名應該使用小寫字母,不要使用下劃線或混合大小寫。 ⌘ Read more
Go 併發陷阱:死鎖、活鎖和飢餓**
\\*概述在併發編程中,死鎖、活鎖和飢餓是三個極爲重要且需要警惕的概念。它們代表了程序因爲併發衝突而陷入無法繼續執行的狀態。本文將討論 Go 語言中死鎖、活鎖和飢餓的概念、原因,以及如何通過合理的設計和使用併發控制機制來避免這些問題。1. 死鎖(Deadlock)1.1 什麼是死鎖死鎖是指兩個或多個進程無限期地等待對方釋放資源,而導致程序無法繼續執行的狀態。在 Go 語言中,死鎖通常發生在通道或互斥鎖 ⌘ Read more
*
Go 內存分配:結構體中的優化技巧**
在使用 Golang 進行內存分配時,我們需要遵循一系列規則。在深入瞭解這些規則之前,我們需要先了解變量的對齊方式。Golang 的unsafe包中有一個函數Alignof,簽名如下:func Alignof(x ArbitraryType) uintptr對於任何類型爲v的變量x,AlignOf函數會返回該變量的對齊方式。我們將對齊方式記爲m。現在,Golang 確保m是滿足變量x的內存地址 % ⌘ Read more
動態併發控制:sync-WaitGroup 的靈活運用**
\\*概述在併發編程中,控制主程序等待所有 Goroutine 完成任務是一項關鍵任務。Go 語言提供了 sync.WaitGroup 來解決這一問題。本文將講解 sync.WaitGroup 的使用方法、原理以及在實際項目中的應用場景,用清晰的代碼示例和詳細的註釋,助力讀者掌握併發編程中等待組的使用技巧。1. 基本使用1.1 初始化和添加計數package mainimport ( "fmt" ⌘ Read more
*
Go 實現接口冪等方案設計**
冪等(idempotent)這個詞來源於數學運算,其中的含義是做一次和做多次的效果是一樣的,即該操作可以重複進行,卻不會改變系統的狀態。在計算機科學中,它們的含義一樣:某個接口或函數,無論調用一次還是調用多次,產生的副作用都是相同的。例如,HTTP 的 GET、PUT、DELETE、HEAD 和 OPTIONS 這些方法都是冪等的,當你向這個 URL 發出一個請求,無論做一次或者做多次,結 ⌘ Read more
10 個令人驚歎的 Go 語言技巧,讓你的代碼更加優雅**
在開發生產項目的過程中,我注意到經常會發現自己在重複編寫代碼,使用某些技巧時沒有意識到,直到後來回顧工作時才意識到。爲了解決這個問題,我開發了一種解決方案,對我來說非常有幫助,我覺得對其他人也可能有用。以下是一些從我的實用程序庫中隨機挑選的有用且多功能的代碼片段,沒有特定的分類或特定於系統的技巧。1\\. 追蹤執行時間的技巧如果你想追蹤 Go 中函數的執行時間,有一個簡單高效的技巧可以用一行代碼實現, ⌘ Read more
提升您的 Go 應用性能的 6 種方法**
如果您的應用程序在 Kubernetes 中運行,請自動設置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配額-------------------------------------------------------------------Go 調度器 可以具有與運行設備的核心數量一樣多的線程。由於我們的應用程序在 Kubernetes 環境中的節點上運行,當我們的 Go 應用程 ⌘ Read more
細聊 Go 高級併發用法 - singleflight
什麼是 singleflight Singleflight 是 Google 開源的一個 Go 語言庫,主要用於控制對共享資源的重複請求,防止服務器被同時高併發訪問所引發的 "雪崩" 問題。具體來說,當多個相同的請求(例如訪問同一個數據或地址)在同一時間發生時,Singleflight 會將這些請求合併爲一個。實際上,只有一個請求會被執行,然後這個請求的結果將被所有其他的請求共享。這個庫的主要應 ⌘ Read more
通道多路複用:Go 語言併發編程的黃金法則**
\\*概述在 Go 語言中,通道是一種強大的併發原語,而多路複用則是一項強大的技術,使得能夠同時處理多個通道的數據,提高程序的併發性能。本文將討論 Go 語言中通道的多路複用特性、用法以及如何巧妙地同時處理接收和發送多個通道的數據。1. 多路複用基礎多路複用是通過 select 語句實現的,它允許在多個通道之間進行非阻塞的選擇。先來看一個簡單的例子package mainimport ( "fmt" ⌘ Read more
*
Go 語言 RPC 實戰:打造自己的遠程調用服務**
\\*概述在分佈式系統中,遠程過程調用(RPC)是一種關鍵的通信方式,而 Go 語言提供了強大的 RPC 支持,使得在網絡間實現函數調用變得更加便捷。本文將探討 Go 語言中 RPC 的基礎概念、實現方式,並通過示例代碼演示如何模擬遠程過程調用系統。1. RPC 基礎概念1.1 什麼是 RPCRPC 是一種遠程過程調用的協議,允許程序調用其他地址空間(通常是網絡上的另一臺機器)的過程。它隱藏了底層通信 ⌘ Read more
*
Go vs Rust:文件上傳性能比較**
在本文中,主要測試並比較了 Go—Gin 和 Rust—Actix 之間的多部分文件上傳性能。設置所有測試都在配備 16G 內存的 MacBook Pro M1 上執行。軟件版本爲:• Go v1.20.5 • Rust v1.70.0 測試工具是一個基於 libcurl 並使用標準線程的自定義工具,能夠發送多部分請求。資產目錄中有 100,000 個文件。每個文件的大小都是確切的 1 ⌘ Read more
互斥鎖與讀寫互斥鎖的妙用**
\\*概述在併發編程中,控制共享資源的訪問是至關重要的。Go 語言提供了兩種主要的互斥鎖,即 sync.Mutex(互斥鎖)和 sync.RWMutex(讀寫互斥鎖)。本文將討論這兩種鎖的使用方式、原理和適用場景,並通過實例代碼演示它們在併發環境中的正確應用。1. sync.Mutex(互斥鎖)1.1 互斥鎖基本使用互斥鎖用於保護共享資源,確保同一時刻只有一個 Goroutine 可以訪問。下面是一個 ⌘ Read more
*
20 個 Go 編程最佳實踐**
在本教程中,我們將探討 Golang 中的前 20 個最佳編碼實踐。這將幫助你編寫有效的 Go 代碼。20: 使用適當的縮進------------良好的縮進使你的代碼易讀。一致地使用製表符或空格(最好是製表符),並遵循 Go 的縮進標準。package mainimport "fmt"func main() {    for i := 0; i < 5; i++ {        fmt.Pri ⌘ Read more
=
通道技巧,關閉通道後還能繼續用**
\\*概述在 Go 語言中,通道(Channel)是一種強大的併發機制,但很多開發者在關閉通道後是否還能使用存在疑惑。本文將探討在關閉通道後繼續利用通道的技巧,解釋其原理,並通過實例代碼演示在實際應用中的巧妙用法。1. 通道關閉的基本原理在 Go 語言中,通過 close 函數可以關閉一個通道。關閉通道後,將不能再向通道發送數據,但仍然可以從通道接收數據。這是因爲關閉通道後,接收者仍然可以讀取通道中已 ⌘ Read more
*
【Go 標準庫】詳解 net-http 包實現原理**
一、前言Go 語言自帶的 net/http 包提供了 HTTP 客戶端和服務端的實現,實現一個簡單的 http 服務非常容易,其自帶了一些列結構和方法來幫助開發者簡化 HTTP 服務開發的相關流程,因此我們不需要依賴任何第三方組件就能構建並啓動一個高併發的 HTTP 服務器。HTTP 中客戶端與服務器建立連接發送請求與響應,這個過程可以描述爲如下圖。Server 端需要有 router 、hand ⌘ Read more
Go 每日一庫之 goose — 數據庫版本管理工具**
goose 是一個用 go 語言編寫的數據庫版本管理的命令行工具。其 github 地址如下:https://github.com/pressly/goose什麼是數據庫版本管理?-----------數據庫版本管理,其實就是對數據表結構的演進的管理。比如,我們有一個用戶表 user,如下:create table if not exists user (  id int autoincrecem ⌘ Read more
Go 語言硬件加速:多核並行化的妙用**
\\*概述隨着計算機硬件架構的演進,多核處理器已經成爲當今主流。在這個背景下,如何充分利用多核心處理器的性能,提高程序的併發度成爲了一個關鍵問題。本文將探討在 Go 語言中如何實現多核並行化,充分發揮硬件潛力,提高程序的執行效率。1. Go 語言併發基礎在討論多核並行化之前,先回顧一下 Go 語言中的併發基礎知識。1.1 GoroutineGoroutine 是 Go 語言中的輕量級線程,由 Go 運 ⌘ Read more*
golang-etcd 實現的服務註冊和服務發現**
etcd是一個功能強大、可靠性高、易用性好的分佈式鍵值存儲系統,可以幫助用戶在分佈式環境中存儲和同步關鍵數據,並實現高可用性和數據一致性。強大的觀察和通知功能,使其成爲一個非常適合用於作爲配置管理中心或者服務註冊 / 發現模塊的選擇。一下是基於etcd實現的服務註冊 / 發現1 服務註冊package mainimport ( "context" "fmt" "log" " ⌘ Read more
Go 語言代碼斷行規則詳解**
一、Go 代碼斷行概念代碼斷行,或稱爲代碼換行,是編程中一個很常見但卻經常被忽視的細節。它涉及到如何在代碼行結束時添加換行符,使代碼展示爲多行結構。代碼斷行不僅影響代碼的可讀性和美觀性,還可能與編程語言的語法、編譯器行爲、以及工具鏈交互有關。在 Go 語言中,這個概念尤爲重要,因爲 Go 有其獨特的斷行規則和工具支持。爲什麼需要代碼斷行?----------可讀性代碼斷行首先是爲了提高代碼的可 ⌘ Read more
Go 如何實現責任鏈模式**
責任鏈模式(Chain of Responsibility)是一種行爲設計模式,其主要思想是創建多個對象並通過每個對象對其封裝的方式檢查一個順序,然後決定哪一個對象應該處理這個請求。這種模式可以動態地修改處理順序。簡單來說,責任鏈模式就是一個對象鏈對請求進行處理,但實際的處理者是其中的一個對象,而不是全部。在責任鏈模式中,請求者並不知道處理者是哪一個,只知道請求在責任鏈中被處理了。處理者也 ⌘ Read more
揭祕系列: Goroutine 調度器**
現在不要擔心理解上面的圖片,因爲我們將從非常基礎的知識開始。Goroutines 分佈在線程中,由 Goroutine 調度器在幕後處理。根據我們之前的討論,我們知道一些關於 Goroutines 的事情:• 從原始執行速度來看,Goroutines 不一定比線程更快,因爲它們需要一個實際的線程來運行。•Goroutines 的真正優勢在於上下文切換、內存佔用、創建和拆除的成本等方面。你可能之前聽 ⌘ Read more
Go 如何實現長連接**
科普        長連接,也被稱爲持久連接,是對同一個服務器的多次請求,使用相同的 TCP 連接來發送。這與短連接(每一個請求建立一個新的 TCP 連接)形成對比。長連接可以減少建立和關閉連接的時間開銷,提升網絡通信效率。例如在 HTTP/1.1 中,默認就是採用長連接的方式,大大提高了 web 頁面的加載速度。客戶端和服務器之間建立的 TCP 連接在傳輸完數據之後並不立即斷開,而是可以繼續被用 ⌘ Read more
Go 語言 Channel 進階:巧妙運用超時機制**
\\*概述在 Go 語言中,Channel(通道)是一種強大的工具,而超時機制則爲併發編程增添了更多控制的手段。本文將討論 Go 語言中 Channel 超時機制的特性、用法以及如何在併發程序中精準地掌握等待時間。1. 超時機制基礎超時機制是通過 time.After 和 select 結合使用來實現的。以下是一個簡單的例子package mainimport ( "fmt" "time")fun ⌘ Read more
*
只改一個參數讓 Golang GC 耗時暴降到 1-30!**
👉導讀Golang GC 問題的處理網上有比較多的參考文章與教程,本文則聚焦在一次實際業務場景中遇到的問題,並將問題排查處理的全過程詳細地做了整理記錄,相信對各位 Gopher 有較大參考價值。👉目錄1 問題現象2 確定原因3 根因分析 4 刨根問底 5 解決方案6 問題解決7 總結 01問題現象 最近有調用方反饋,在使用我們提供的某接口一段時間後,超時率的毛刺比較多,有時候成功率會 ⌘ Read more
無緩衝通道:Go 語言同步之道**
\\*概述在 Go 語言中,通道(Channel)是一種強大的併發原語,而無緩衝的通道更是引人注目。無緩衝的通道具有精準同步的特性,它在發送和接收數據時會強制等待對方準備好,從而實現了協程之間的高效同步。本文將探討 Go 語言中無緩衝通道的特性、用法和實際應用。1. 無緩衝通道無緩衝通道是指通道在創建時沒有預留存儲空間,發送和接收操作必須同時發生,否則會導致阻塞。下面是一個簡單的無緩衝通道的例子pac ⌘ Read more
*
Log - 一個簡潔且多彩的 Go 語言日誌庫**
背景介紹在日常的開發工作中,我們經常需要記錄程序運行過程中的各種信息,以便於我們瞭解程序的運行狀態,發現並解決問題。然而,標準的日誌庫通常功能單一,輸出格式單調,缺乏人性化的設計,使得我們在查看日誌時需要花費大量的時間和精力。因此,我們需要一個功能強大,易於使用,輸出格式豐富多彩的日誌庫,來提高我們的開發效率。今天要給大家推薦一個 GitHub 開源項目 charmbracelet/log,該項目 ⌘ Read more
Golang 不可不知的 7 個併發概念**
併發性支持是 Golang 最重要的原生特性之一,本文介紹了 Golang 中和併發性相關的 7 個概念。原文: Golang: 7 must-know concurrency related concepts[1]併發是 Go 編程語言的基本特性,意味着程序可以同時執行多個任務。Golang 的併發獨特而強大,其內置的輕量級協程 (goroutine) 和通道 (channel) 支持創建可 ⌘ Read more
Goroutine 和 coroutine 區別,這一篇就夠了**
\\*概述Goroutine 和 Coroutine 都是在編程中用於實現併發的概念,但它們有着不同的實現方式、特性和用途。本文將探討這兩種併發模型的區別,通過具體的示例代碼演示它們的使用和特點。一、什麼是 Goroutine1.1 定義 GoroutineGoroutine 是 Go 語言中的輕量級線程,由 Go 的運行時系統負責管理。與傳統線程相比,Goroutine 更輕便、更高效,能夠更好地支 ⌘ Read more
*
帶你深度瞭解 unsafe-Pointer
一、前言相信看過 Go 源碼的同學已經對 unsafe.Pointer 非常的眼熟,因爲這個類型可以說在源碼中是隨處可見:map、channel、interface、slice… 但凡你能想到的內容,基本都會有 unsafe.Pointer 的影子。看字面意思,unsafe.Pointer 是 “不安全的指針”,指針就指針吧,還安不安全的是個什麼鬼?二、指針爲了更深入瞭解 unsafe.Point ⌘ Read more
爲什麼使用 Golang 而非 Rust 開發桌面應用?**
MoonGuard 團隊選擇 Golang 而不是 Rust 作爲他們的 Krater 桌面應用程序,因爲 Golang 中更容易進行內存管理、類型安全和 ORM 支持。使用 Rust 和 Tauri 時面臨的一些挑戰包括:難以理解 Rust 的所有權和借用規則、 其嚴格的類型安全有時會限制開發速度、 難以爲 SQLite 找到合適的 ORM, 以及測試非常複雜。 項目進行 ⌘ Read more
萬字解析 go 語言分佈式消息隊列 nsq
0 前言本期和大家一起探討一款完全基於 go 語言實現的分佈式消息隊列——nsq.有關於消息隊列 Message Queue 的概念及作用,大家可以參考我之前發表的文章——萬字長文解析如何基於 Redis 實現消息隊列,這些基礎知識本文不再贅述.nsq 是一款基於 go 語言開發實現的分佈式消息隊列組件,在 golang 世界中擁有着很高的認可度和流行性,截止今日在 github 上的 stars ⌘ Read more
併發與並行:Go 語言中的異曲同工**
\\*概述在 Go 語言中,經常聽到併發(Concurrency)和並行(Parallelism)這兩個概念;它們雖然看似相近,但卻有着不同的內涵。本文將探討併發與並行的區別,通過實例代碼演示,幫助讀者深刻理解這兩者在 Go 語言中的應用場景及實現方式。1. 併發與並行:概念辨析在計算機開發領域,併發 和 並行 這兩個概念經常被混淆使用,但它們有着明確的區別。簡而言之,併發 是指任務在時間上重疊執行, ⌘ Read more
*
Go 的插件機制:動態加載與卸載**
大家好,我是 [lincyang]。今天,我們要深入探討 Go 語言的插件機制,特別是動態加載與卸載的相關技術。Go 語言的插件系統提供了一種將編譯好的代碼作爲插件動態加載到 Go 程序中的能力,這爲程序的擴展性和模塊化提供了極大的便利。Go 插件機制概述---------Go 語言從 1.8 版本開始引入了插件系統(plugin package),允許用戶動態加載預編譯的代碼庫。這些代碼庫以.s ⌘ Read more
Go 如何解決併發中的競爭狀態**
\\*概述在 Go 語言中,實現併發編程是其強大功能之一。然而,隨之而來的是競爭狀態(Race Condition)問題,這是在多個 Goroutine 併發訪問共享資源時可能遇到的一種常見錯誤。本文將介紹競爭狀態的概念、示例代碼以及解決方案,幫助理解並避免在 Go 開發的程序中出現競爭狀態的問題。主要內容包括 1. 競爭狀態簡介 2. 共享資源與競爭條件 3. 競爭狀態的示例 ⌘ Read more
*
Go 語言如何在終端打開實現進度條處理數據**
在 Go 語言中,可以使用第三方庫如pb(progress bar)來在終端上實現進度條以處理數據。這個庫可以幫助您更容易地在終端中顯示進度信息。使用pb庫的示例來顯示數據處理的進度條首先,您需要安裝pb庫:go get github.com/cheggaaa/pb/v3接下來,使用以下代碼示例來實現一個數據處理的進度條:package mainimport (    "fmt"    "ti ⌘ Read more
使用 GO 語言開發跨平臺桌面應用**
Energy 是 Go 基於 CEF(Chromium Embedded Framework) 開發的框架,內嵌 CEF 二進制,用於構建 Windows、Mac OS X 和 Linux 桌面應用程序。項目簡介 energy 是 Go 基於 CEF(Chromium Embedded Framework) 開發的框架,內嵌 CEF 二進制 使用 Go 和 Web 端技術 (HTML ⌘ Read more
Go 新手步步爲贏:併發編程通信指南**
\\*概述Go 語言在併發通信方面有着獨特的 CSP 併發模型。Go 語言主要通過 Channel 實現 Goroutine 間通信, 也支持共享內存和原子操作方式。本文將通過示例闡述 Go 語言的各種併發通信方式。主要內容包括 併發通信機制 Channel 通信詳解 共享內存通信 原子操作通信 通信方式選用指南 Channel 通信示例 一、併發通信機制Go 語言支 ⌘ Read more
*
Go 的元編程:代碼生成與 AST 操作**
大家好!我是 [lincyang]。今天我們要一起探討 Go 語言中的元編程,特別是代碼生成和抽象語法樹(AST)操作。元編程是一種編程範式,它允許我們在編譯時或運行時動態地生成或修改代碼。代碼生成的概念與應用什麼是代碼生成?代碼生成是一種編程技術,通過它,程序可以自動地生成源代碼。這在很多場景下都非常有用,比如:ORM 映射、協議緩衝區(Protocol Buffers)等。爲什麼需要代碼生成? ⌘ Read more
go 的 sort 包真心強大,但你真的會用嗎**
讀書的時候,最重要的是成績的排序;工作的時候是能力,金錢的排序;戀愛的時候,也有對愛的排序。這些都是走過的路,是已經確定的排序。 對於做後端的同學,對數據的排序一定不會陌生。比如在一個分頁查詢商品信息的頁面,需要根據商品的創建時間倒序排列,也就是最新創建的商品排在最前面。這個需求實現起來很簡單,只需要使用 sql 的排序語句就可以實現select from product order by c ⌘ Read more
goroutine 源碼分析,直擊併發底層實現**
\\*概述Go 語言中的 goroutine 是一種輕量級線程, goroutine 之間通過 channel 進行通信。使用 goroutine 可以方便地編寫併發程序。本文將介紹 goroutine 的使用方法、調度原理、同步處理及實戰案例等內容。1、goroutine 簡介goroutine 是 Go 語言提供的輕量級線程, 具有以下特點 每個 goroutine 佔用內存很小, 只有 2KB ⌘ Read more*
[Go 工具庫] 輕量級 - 零依賴故障容錯工具庫 Failsafe-go
一、前言Failsafe-go 是一個用於構建容錯 go 應用程序的庫。它的工作原理是用一個或多個彈性策略組合可執行邏輯,這些策略可以根據需要進行組合和組合。策略包括重試、斷路器、速率限制器、超時、隔板和回退。1.1 速率限制器速率限制器可以限制執行速率,以防止系統過載。Failsafe-go 支持兩種類型的速率限制器:平滑和 Bursty。平滑速率限制器允許每個時間段的最大執行次數,使用漏桶方法 ⌘ Read more
Go 語言插件開發:Pingo 庫實踐**
概述在 Go 語言 的生態系統中,插件化開發是一個非常重要的話題。插件化開發允許你將應用程序劃分爲可獨立編譯和部署的模塊,這些模塊可以在運行時加載到主應用程序中,實現了應用程序的靈活性和可擴展性。本文將介紹如何在 Go 語言 中使用 Pingo 庫進行插件化開發,通過實例詳細演示 Pingo 的用法,幫助開發者快速掌握插件化開發的技巧。主要內容包括 瞭解插件化開發 安裝 Pingo 庫 ⌘ Read more
Go 語言併發:釋放程序潛能的魔力**
\\*概述在編程領域,處理多任務和併發操作是必不可少的。Go 語言以其簡潔而強大的併發機制而聞名。本文將簡單探討 Go 語言中的併發。從基本概念到併發的優勢,詳細解釋併發的原理,並通過通俗易懂的示例代碼領略 Go 語言併發編程的魅力。主要內容包括 併發與並行的區別 Goroutine:Go 語言輕量級線程的魅力 Channel:實現 Goroutine 間的通信 Select 語句 ⌘ Read more
*
Go 語言 Context 應用全攻略:異步編程利器**
\\*概述在 Go 語言中,Context(上下文)是一個非常重要的概念,特別是在處理請求時。允許在請求的整個生命週期內傳遞數據、控制請求的取消、處理超時等。本文將介紹 Go 語言中 Context 的使用,幫助更好地理解與處理請求的傳遞與控制。主要內容包括 Context 基礎 Context 創建與傳遞 Context 的超時與取消 Context 的鏈式操作 Conte ⌘ Read more*
Go 語言定時器實戰:性能優化與實用技巧**
\\*概述在日常開發中,定時器是一個非常常用且重要的功能。它可以讓程序在特定的時間間隔內執行某些任務,比如定時清理緩存、定時發送郵件、定時備份數據等。在 Go 語言中,定時器由標準庫 time 提供支持。本文將探討 Go 語言定時器的實現原理和各種應用場景,深入瞭解它的機制和靈活運用。主要內容包括 1. 定時器基礎概念 2. Go 語言中的定時器實現 3. 定時器的高級用法 ⌘ Read more
*
goev - 一款基於 Go 語言的高性能、輕量級、非阻塞、I-O 事件驅動網絡框架**
背景介紹在進行 Go 語言的 TCP 網絡編程時,我們通常使用標準庫(go net),但是標準庫的協程壓力較大,因此我們需要一種更輕量級、高性能的非阻塞 I/O 事件驅動網絡框架。goev 就是爲此而生的。用一句話介紹 goev 項目就是:“goev is a lightweight, concise i/o event demultiplexer implementation in Go”。項目 ⌘ Read more
Go 是如何精緻得進行內存管理?**
前言Go 語言拋棄 C/C++ 中的開發者管理內存的方式,實現了主動申請與主動釋放管理,增加了逃逸分析和垃圾回收,將開發者從內存管理中釋放出來。所以我們在日常編寫代碼的時候不需要精通內存的管理,它確實很複雜。但是另一方面,如果你掌握了 Go 內存管理的基本概念和知識點,可以讓你寫出更高質量的,更壓榨機器性能的代碼;另外,還能幫助你更快更精準得定位 Bug,快速解決問題。所以,作爲進階的 Go 開發 ⌘ Read more
玩轉 Go Slices 切片泛型庫**
大家好,我是 陳明勇,一個熱愛技術,喜歡鑽研技術的程序員。前言在 Go 1.21.0 版本中,引入了 切片泛型庫,它提供了很多有用的函數,特別是在搜索、查找和排序等方面,爲我們開發者提供了諸多便利之處。而本文將會對 slices 庫提供的函數進行介紹,準備好了嗎,準備一杯你喜歡的咖啡或茶,隨着本文一探究竟吧。slicesslices 庫包含的函數可以分爲以下類型:搜索:通過二分查找算法查找指定元素 ⌘ Read more
Go 併發可視化解釋 - sync-Mute
在學習 Go 編程語言時,您可能會遇到這句著名的格言:“不要通過共享內存來進行通信;相反,通過通信來共享內存。” 這句話構成了 Go 強大併發模型的基礎,其中通道(channels)作爲協程之間的主要通信工具。然而,雖然通道是管理併發的多功能工具,但錯誤地假設我們應該始終用通道替換傳統的鎖定機制,如 Mutex,是一個錯誤的觀念。在某些情況下,使用 Mutex 不僅恰當,而且比通道更有效。在我的 ⌘ Read more
Go etcd 的依賴問題終於解決了**
大家好,我是煎魚。前幾年非常高頻的接觸到這一堆微服務相關組件:grpc + grpc-gateway + etcd + protobuf + protoc-gen-go,一開始都是相安無事,逐步跟進新版本。這不,幺蛾子就來了。寫這些組件的開發大佬(或公司)都不在一起,各自爲政,各有各的想法、喜歡、規範... 因此會出互相不兼容,甚至出現了卡脖子的情況。各種兼容問題------當 etcd 是 v3 ⌘ Read more
新手向:Go 語言發送郵件簡易教程**
\\*概述電子郵件是應用程序中常見的功能之一, Go 語言內置了對 SMTP 協議的支持, 可以方便地用 Go 語言編寫程序來發送電子郵件。本文將簡單介紹如何使用 Go 語言的 net/smtp、net/mail 等標準包來發送電子郵件。主要內容包括 發送郵件簡介 構建郵件內容 連接 SMTP 服務器 發送包含附件的郵件 設置抄送與密送 使用模板發送郵件 示例: ⌘ Read more
*
Go 通道機制與應用詳解**
一、概述Go 語言(也稱爲 Golang)是一個開源的編程語言,旨在構建簡潔、高效和可靠的軟件。其中,通道(Channel)是 Go 併發模型的核心概念之一,設計目的是爲了解決不同協程(Goroutine)間的數據通信和同步問題。通道作爲一個先進先出(FIFO)的隊列,提供了一種強類型、線程安全的數據傳輸機制。在 Go 的併發編程模型中,通道是一個特殊的數據結構,其底層由數組和指針組成,並維護着一 ⌘ Read more
go 官方自帶限流庫超詳細教程來了,開發者必備**
golang.org/x/time/rate 是 Go 語言官方提供的一個限流庫,用於在程序中限制特定操作的速率。該庫使用了令牌桶算法,可以通過設置一個速率限制 r(即每秒可以執行的操作數)和一個容量 b(即令牌桶的大小)來控制操作的速率。下面是該庫的詳細使用教程。1.Allow(l Limit) bool: 該方法用於檢查是否可以處理一個事件(或一個令牌),返回一個布爾值。如果令牌桶中有足夠的令 ⌘ Read more
Go 的異步編程:使用 Futures 與 Promises
開場白---大家好!我是 [lincyang]。今天我們將探討 Go 語言中的異步編程,特別是如何使用 Futures 與 Promises。引言--在現代軟件開發中,異步編程是一種常見的編程範式,用於提高程序的性能和響應速度。Go 語言提供了多種異步編程的方法,其中 Futures 與 Promises 是非常有用的工具。Go 的異步編程基礎----------Go 語言使用 goroutine ⌘ Read more
一篇文章教會你 Go 語言基礎之反射**
前言--Hey,大家好呀,我是碼農,星期八!,我們以前學的呀,都屬於正向定義變量,正向開發!但是有沒有什麼辦法能反着來呢?根據變量獲取類型等操作。一起來看看 Go 的反射吧!!!什麼是反射-----反射,嗯...,就是反着的意思唄,就是把東西反過來。比如這樣的一個很簡單的代碼。var a int = 3fmt.Println(a)我們當然知道a變量是int類型,但是反過來想,程序是怎麼知道a是in ⌘ Read more
=
深入理解 Go 標準庫 - http server 的啓動**
如何用最少的代碼創建一個 HTTP server?package mainimport ( "net" "net/http")func main() { // 方式1 err := http.ListenAndServe(":8080", nil) if err != nil {   panic(err) }}點開http.ListenAndServe可以看到函數只是創建了Server類型並調用s ⌘ Read more
gorm 框架原理 - 源碼解析**
0 前言本篇將和大家探討 go 語言中最流行的 orm 框架 ——gorm 的底層實現原理.那麼步入正題,本篇分享內容的目錄大綱如下所示:1 入口gorm 框架是國內的大神 jinzhu 基於 go 語言開源實現的一款數據庫 orm 框架. 【gorm】一詞恢弘大氣,前綴 go 代表 go 語言, 後綴 orm 全稱 Object Relation Mapping,指的是使用對象映射的方式,讓使用 ⌘ Read more
Go 命令行解析神器入門 - 10 分鐘上手 flag 包**
Go 語言內置的 flag 包提供了命令行參數解析的功能。可以將命令行中的參數輸入轉換爲程序定義的變量值, 使程序具備靈活的用戶交互能力。本文將介紹 flag 包的使用方法, 主要內容包括 flag 包簡介 flag 基礎用法 flag 參數類型 自定義 flag 解析 flag.NewFlagSet flag 其他函數 flag 實戰示例 1. flag ⌘ Read more
學習 gorm:gorm 中的核心數據結構**
大家好,我是漁夫子。今天咱們一起來學習下 gorm 中的幾個核心數據結構。通過了解 gorm 底層的數據結構,能夠讓我們瞭解 gorm 底層的實現,以便更好的使用 gorm。在 gorm 中主要有 5 個核心結構:DB、Config、Statment、Clause 和 Schema。接下來我們就詳細的看下每種數據結構以及各結構之間的關係。一、DB----在使用 gorm 的時候,我們首先會使用 g ⌘ Read more
在 Go 中支持 WASI-Go 1-21 新特性-**
Go 1.21 通過添加新的 wasip1 值來支持針對 WASI 預覽版 1 系統調用 API 的新端口。這個端口建立在 Go 1.11 中引入的現有 WebAssembly 端口之上。什麼是 WebAssembly?--------------------WebAssembly(Wasm) 是一種最初爲 Web 設計的二進制指令格式。它代表了一種標準, 允許開發人員以接近本機速度直接在 Web ⌘ Read more
iptables 以及 Go 操作庫**
iptables 是 Linux 系統中的一個非常強大的防火牆工具,它可以用於過濾、修改、重定向和處理網絡數據包。iptables 是基於 Netfilter 框架的,Netfilter 是 Linux 內核的一部分,它提供了在內核級別處理網絡數據包的能力。iptables 的主要功能包括:數據包過濾:iptables 可以根據各種條件(如源 IP 地址、目的 IP 地址、協議類型、端口號等)來決 ⌘ Read more
Go 語言生成二維碼實用指南**
\\*概述二維碼(QR Code)是一種二維條碼,它可以存儲大量的信息,通常用於快速識別和傳遞數據。在 Go 語言中,可以使用各種庫來生成二維碼,實現圖片到數據的轉換。本文將介紹 Go 語言中生成二維碼的方法,讓開發者輕鬆應對需要生成二維碼的各種場景。主要內容包括 1. 二維碼基礎知識:瞭解二維碼的構成 2. 使用第三方庫生成二維碼:go-qrcode 3. 生成帶有 Logo 的 ⌘ Read more
*
Go 語言依賴管理的核心 - go-mod 文件解析**
\\*1\\. go mod 簡介go mod 是 Go 語言的依賴管理工具, 類似於 Node.js 中的 npm 或者 Python 中的 pip, 可以大大簡化依賴的管理。它主要解決了這些問題 依賴關係混亂, 不清楚具體使用了哪些包和版本 不同機器無法復現相同的依賴構建, 導致構建失敗 上傳代碼時缺失依賴, 導致他人無法構建 go mod 的主要功能有 使用 go.mod 文件記錄 ⌘ Read more*
像 Redis 作者那樣,使用 Go 實現一個聊天服務器,不到 100 行代碼**
昨天 Redis 的作者 antirez (Salvatore Sanfilippo) 昨天創建一個新的演示項目:smallchat[1],用了 200 行 C 語言代碼實現了一個聊天室。我看了一下,覺得很有意思,於是就用 Go 語言實現了一下,代碼不到 100 行,功能和 antirez 的實現一樣。antirez 三年前停止寫代碼,專心寫他的科幻小說《Wohpe》,今天看起來他又回到編程的狀態 ⌘ Read more
深入研究:Go 語言文件寫入的性能差異**
\\*概述在 Go 語言開發中,文件操作是一個非常常見的任務。在不同的應用場景下,可能會面臨選擇使用哪種寫文件方式的問題。本文將詳細探討 Go 語言中幾種寫文件的方式,包括普通文件寫入、緩衝寫入和併發寫入。通過性能對比爲你解析何時選擇何種方式,以及如何最大程度地提升文件寫入效率。主要內容包括 普通文件寫入 緩衝寫入 併發寫入 性能對比與分析 最佳實踐建議 \\*1. 普通文件寫 ⌘ Read more
Go 系統編程不求人:os 包全面解析**
Go 語言 os 包用法簡述\\*1. os.Args 獲取命令行參數os.Args 是一個 []string 類型的 slice, 它包含了命令行調用程序時傳入的所有參數。通過它可以訪問到命令行參數。package mainimport ( "fmt" "os")func main() { args := os.Args fmt.Println(args)}在終端運行:go ⌘ Read more
=
Go 語言必學的單例設計模式**
\\*Go 語言單例模式:確保一個類只有一個實例概述單例模式是一種常見的設計模式,它保證一個類只有一個實例,並提供一個全局訪問點。在 Go 語言中,實現單例模式相對簡單,但需要注意線程安全和性能等問題。本文將介紹 Go 語言中實現單例模式的方法,能夠在項目中應用這一設計模式。主要內容包括 經典單例模式實現 使用 sync.Once 的單例模式 單例模式的應用場景 單例模式的優缺點 ⌘ Read more
*
時間旅行者的工具箱:Go 語言 time 包解讀**
\\*概述時間和日期處理在軟件開發中是一個常見但也常被低估的領域。Go 語言提供了強大的 time 包,用於處理時間、日期、時區等相關操作。本文將探討 Go 語言中的 time 包,詳細介紹其使用方法,包括時間的創建、格式化、解析、時區處理等。旨在幫助理解和充分掌握 Go 語言中時間和日期處理的技能。主要內容包括 1. 什麼是 time 包? 2. 時間的基本操作 3. 時間的格式 ⌘ Read more
*
Go 併發可視化解釋 - sync-WaitGroup
場景Avito 是一名校車司機,他幫助 4 個 Gopher 孩子上學。每天,Avito 在他們的社區等待孩子們。他不知道孩子們需要多長時間,但他確切地知道有 4 個孩子他需要等待。當一個孩子準備好時,他 / 她會說:Done(),將計數器減 1。Avito 仍然被阻塞,因爲計數器仍然大於 0。他必須等到所有其他孩子準備好。如果有兩個孩子同時準備好,它們的同時準備會導致WaitGroup出現不一致 ⌘ Read more
Go1-21 中的 PGO 技術詳解**
2023 年初,Go 1.20 發佈了 PGO(Profile-guided optimization) 預覽版供用戶測試。在解決了預覽版中的已知限制,並通過社區反饋和貢獻進行了額外的改進後,Go 1.21 中的 PGO 支持已準備好用於生產!更多更詳細的內容可以參考 PGO 用戶指南(https://go.dev/doc/pgo)。下面我們將通過一個例子來展示 PGO 如何提高應用程序性能。在此 ⌘ Read more
用 Go 請求接口不執行 body-Close-- 會內存溢出嗎?這次告訴你真相!**
golang 的net/http庫是我們平時寫代碼中,非常常用的標準庫。由於 go 語言擁有 goroutine,goroutine 的上下文切換成本比普通線程低很多,net/http 庫充分利用了這個優勢,因此,它的內部實現跟其他語言會有一些區別。其中最大的區別在於,其他語言中,一般是多個網絡句柄共用一個或多個線程,以此來減少線程之間的切換成本。而 golang 則會爲每個網絡句柄創建兩個 go ⌘ Read more
掌握 Go 語言正則表達式:regexp 包全面解析**
\\*概述正則表達式是文本處理和匹配的利器,Go 語言提供了內建的 regexp 包,爲開發者提供了強大的正則表達式功能。主要內容包括 1. 什麼是正則表達式? 2. Go 語言中的正則表達式基礎 3. regexp 包的引入與基本用法 4. 正則表達式的模式匹配與查找 5. 正則表達式的替換與提取 6. 高級正則表達式技巧 7. 性能優化與最佳實踐 ⌘ Read more
*
通過重構 Go 項目來介紹基本的 CQRS
您很可能接觸過其中某種項目:有一個難以理解和更改的、無法維護的巨大數據模型 並行開發新的功能時受到重重限制 項目很難進行優化擴展 但通常往往是三件壞事一起發生的,有這些問題的服務並不少見。要解決這些問題,首先想到的是什麼?讓我們把它拆分成更多的微服務!遺憾的是,如果不進行適當的研究和規劃,盲目重構後的情況可能會比之前更糟:業務邏輯和流程可能變得更加難以理解 \\-\\- 複雜的邏輯如果集 ⌘ Read more
Go 的併發模式:使用 Context 進行資源管理**
大家好!我是 [lincyang]。今天我們要一起探討 Go 語言中的一個核心話題:使用 Context 進行資源管理。什麼是 Context?Context,即上下文,是 Go 語言中用於控制多個 goroutine 之間交互的對象。它在context包中定義,成爲 Go 併發編程中不可或缺的一部分。Context 主要用於三個方面:超時控制、取消操作和元數據傳遞。超時控制在網絡請求或數據庫查詢 ⌘ Read more
RuleGo - 一個基於 Go 語言的輕量級、高性能、嵌入式規則引擎**
背景介紹在處理大量數據時,我們經常需要對數據進行聚合、分發、過濾、轉換、豐富和執行各種操作。而 RuleGo 是一個基於 Go 語言的輕量級、高性能、嵌入式規則引擎,可以幫助我們解決這些問題。它可以在低成本設備上高效地處理和鏈接數據,適用於物聯網邊緣計算。同時,RuleGo 還是一個靈活、高度可定製的事件處理框架,可以滿足高度個性化或頻繁變化的業務場景需求。用一句話介紹 RuleGo 項目就是:“ ⌘ Read more
GORM Gen 使用指南**
Gen 介紹------Gen 是由字節跳動無恆實驗室與 GORM 作者聯合研發的一個基於 GORM 的安全 ORM 框架,主要通過代碼生成方式實現 GORM 代碼封裝。Gen 框架在 GORM 框架的基礎上提供了以下能力:基於原始 SQL 語句生成可重用的 CRUD API 生成不使用interface{}的 100% 安全的 DAO API 依據數據庫生成遵循 GORM 約定的結構 ⌘ Read more
Fiber Golang:Golang 中的強大 Web 框架**
揭示 Fiber 在 Go Web 開發中的特點和優勢---------------------------在不斷髮展的 Web 開發領域中,選擇正確的框架可以極大地影響項目的效率和成功。介紹一下 Fiber,這是一款令人印象深刻的 Golang(Go 語言)Web 框架。以其飛快的性能和強大的特性而聞名,Fiber Golang 已成爲開發人員在構建高性能 Web 應用程序時的熱門選擇。在本文中 ⌘ Read more
Go 逆向研究**
基礎信息----  go 語言默認採用靜態編譯的策略,這意味着各種標準庫和第三方庫包括 runtime 和 gc 都會被全靜態鏈接構建,這導致 go 二進制文件較大,同時 go 函數調用約定,數據結構和棧管理策略非常特殊,而且不同 go 版本之間的細節也存在很多差異,這一系列原因導致 go 逆向存在諸多難處。不過根據其特殊之處入手可以幫助進行符號恢復,字符串引用恢復等操作來幫助逆向工程師獲得更好的 ⌘ Read more
構建 Go 語言的動態插裝 Agent
我們在 Sqreen (譯註:一家安全公司)一直致力於讓的安全保護透明無感、接入平滑。最近,我們發佈了 Sqreen for Go,它可以在不需要任何代碼改動的情況下檢測和阻止 Go 應用中的安全問題。爲了實現這一點,我們利用了動態插裝(dynamic instrumentation)在運行時向程序中插入額外的安全邏輯。作爲我們動態插裝系列的最新發文,這篇文章將要討論動態插裝,Sqreen 的 G ⌘ Read more
通過實例理解 Go Web 身份認證的幾種方式**
在 2023 年 Q1 Go 官方用戶調查報告 [1] 中,API/RPC services、Websites/web services 都位於使用 Go 開發的應用類別的頭部 (如下圖):我個人使用 Go 開發已很多年,但一直從事底層基礎設施、分佈式中間件等方向,Web 應用開發領域涉及較少,像 Web 應用領域常見的 CRUD 更是少有涉獵,不能不說是一種 “遺憾”^^。未來一段時間,團隊會接 ⌘ Read more
Go 語言數學計算的祕密武器:big 包詳解**
\\*1\\. big 包介紹與背景需求背景通常情況下, 使用內置的 int 和 float64 等類型就可以滿足大部分計算需求。但是這些類型都有上限, 比如 int 在 64 位系統上最大值爲 9223372036854775807。當需要處理比這更大或者更小的數時, 內置類型就不夠用了。此外, 浮點數計算存在精度問題, 可能在某些精確場景下產生誤差。big 包的主要功能big 包提供了以下高精度計算功 ⌘ Read more
*
如何在 Go 語言中實現 Unix 風格的進程管道?**
今天看到包雲崗老師的一條微博:這個一小時就在 Unix 中實現了管道的系統調用的出處來自於《Unix 傳奇》一書,這本書是我讀過的最好的一本關於 Unix 歷史的書籍,裏面介紹了很多大神的光輝事蹟,Ken Thompson 是 Unix 的創始人之一,他還是 Go 語言的三巨頭之一。那麼,在 Go 語言中,如何實現進程的管道呢?在 Go 語言中,你可以使用exec包來啓動一個進程。主要的函數是Co ⌘ Read more
併發編程的藝術:Go 語言中的 Sync 包技巧**
Go 語言 sync 包與鎖: 限制線程對變量的訪問在 Go 語言的併發編程中, 經常需要限制不同 goroutine 對共享資源的訪問, 避免出現競態問題 (race condition)。Go 語言標準庫提供了 sync 包來實現這種互斥訪問和同步操作。本文將介紹 sync 包中的各種鎖機制, 並通過示例展示它們的實際應用。主要內容包括一、背景介紹當有多個 goroutine 併發訪問同一個變 ⌘ Read more
gorm 框架使用教程**
0 前言從本期開始,我們正式步入 gorm 框架的領域.gorm 是 golang 中最流行的 orm 框架,爲 go 語言使用者提供了簡便且豐富的數據庫操作 api.有關 gorm 的分享話題會分爲實操篇和原理篇,本篇是其中的實操篇,旨在向大家詳細介紹 gorm 框架的使用方法.gorm 本身也支持多種數據庫類型,在本文中,統一以 mysql 作爲操作的數據庫類型.有關 gorm 的更多資訊:• ⌘ Read more