@go

Stories List
@tim_xiao

併發控制-文件鎖

在以往的項目中,遇到高併發大流量需求做併發控制的時候一般都使用redis分佈式鎖或者mysql加鎖處理高併發情況。最近遇到一個php項目,沒有安裝redis,由於某種原因也不考慮使用mysql加鎖控制併發,所以採用文件鎖的方式控制併發,整理了下代碼 php版本 class FileLock { /** @var string 鎖名稱 唯一性 */ private string $k

tim_xiao Avatar

@tim_xiao

Nickname tim_xiao

@jianghushinian

如何基於 Go 語言設計一個簡潔優雅的分佈式任務系統

在當今雲計算與微服務盛行的時代,分佈式任務系統已成為支撐大規模業務的核心基礎設施。今天就來為大家分享下如何基於 Go 語言從零設計和實現一個架構簡潔且擴展性強的分佈式任務系統。 前置概念 本文會設計並實現一個分佈式任務系統,這裏我們要先明確兩個概念。 分佈式:在我們將要實現的分佈式任務系統中,分佈式是指我們的服務可以部署多個副本,這樣才能確保服務更加穩定。 任務:這裏的任務是指異步任務,可能

jianghushinian Avatar

@jianghushinian

Nickname 江湖十年

@xinliangcoder

如何基於 Gin 封裝出屬於自己 Web 框架?

思路 在基於 Gin 封裝出屬於自己的 Web 框架前,你需要先了解 Gin 的基本用法和設計理念。 然後,你可以通過以下步驟來封裝自己的 Web 框架: 封裝路由:Gin 的路由是通過 HTTP 方法和 URL 路徑進行匹配的,你可以根據自己的需求,封裝出符合應用的業務需求的路由。你可以考慮將路由進行分類,例如公共路由、私有路由等,以方便管理。 封裝中間件:Gin 提供了很多中間件,例如日

xinliangcoder Avatar

@xinliangcoder

Nickname 程序員新亮

@gvison

Sponge如何解決傳統Go開發Web和gRPC服務的五大痛點?

引言 在傳統的 Go 語言 Web 服務和微服務開發中,開發者常常面臨諸多痛點,這些問題不僅降低了開發效率,還增加了維護成本。為了解決這些問題,Go 開發框架 Sponge 應運而生。本文將詳細説明傳統開發的痛點,並闡述為何需要 Sponge 來應對這些挑戰。 傳統開發的痛點 1. 繁瑣的開發流程 Web 服務:例如使用 Gin 框架時,需要手動配置路由、處理 HTTP 請求、編寫中間件等,代

gvison Avatar

@gvison

Nickname gvison

@gvison

Sponge:一個重構Go開發體驗的框架,幫助你在開發項目中"開掛"

前言 Go 語言簡潔、高效、併發性能超神,簡直是後端開發的一股清流。喜歡它的純粹,愛它那 “less is more” 的哲學。但説實在的,這份“純粹”有時候也意味着咱得“白手起家”,從零開始搭輪子。 每天寫着相似的 “樣板代碼”(Boilerplate Code),一遍又一遍地處理着數據庫的增刪改查(CRUD),為 HTTP 和 gRPC 服務手寫着數據綁定和服務註冊...... 是不是感覺身體

gvison Avatar

@gvison

Nickname gvison

@wujingquan

用 Go 寫了個 Composer 版本管理器 CVM

Github:https://github.com/wujingquan/cvm 歡迎PR,各位巨佬使用。 CVM for Windows 消除了在Windows上的CLI中更改Composer 版本的麻煩。 這個包有一個比nvm更小眾的用例。當在Windows上開發並使用集成終端時,很難讓這些終端真正聽取PATH的變化。 這個實用程序改變了這一點。 安裝 到Github Releases

wujingquan Avatar

@wujingquan

Nickname wujingquan

@beverly0

SegmentFault 思否技術週刊 Vol.71 — 解讀 Go 語言

剛剛結束的關於「Go」語言的技術徵文活動,參與活動的創作者們,撰寫了很多優質技術內容,本期週刊做了彙總,歡迎大家一起閲讀~ 本篇文章較長,建議收藏後慢慢閲讀~ 文章推薦 【Go 微服務】開發 gRPC 總共分三步 // 王中陽 Go 通過這篇文章我們已經掌握了 gRPC 相關的知識點,可以獨立用 Go 實現客户端和服務端的編寫,並且通過服務註冊對外提供服務,實現可客户端和服務端的 gRPC

beverly0 Avatar

@beverly0

Nickname 鹹口鍋包肉

@beverly0

SegmentFault 思否技術週刊 Vol.79 — 如何優雅的使用 Go?

Go 是 Google 開發的一種靜態強類型、編譯型、併發型,並具有垃圾回收功能的編程語言。 本期技術週刊一起了解 Go,歡迎大家閲讀 ~ 文章推薦 Golang 如何優雅接入多個遠程配置中心? // 王中陽Go viper是適用於go應用程序的配置解決方案,這款配置管理神器,支持多種類型、開箱即用、極易上手。 本地配置文件的接入能很快速的完成,那麼對於遠程apollo配置中心的接入,是否也能很快

beverly0 Avatar

@beverly0

Nickname 鹹口鍋包肉

@crossoverjie

徹底理解閉包實現原理

前言 閉包對於一個長期寫 Java 的開發者來説估計鮮有耳聞,我在寫 Python 和 Go 之前也是沒怎麼了解,光這名字感覺就有點"神秘莫測",這篇文章的主要目的就是從編譯器的角度來分析閉包,徹底搞懂閉包的實現原理。 函數一等公民 一門語言在實現閉包之前首先要具有的特性就是:First class function 函數是第一公民。 簡單來説就是函數可以像一個普通的值一樣在函數中傳遞,也能對變量

crossoverjie Avatar

@crossoverjie

Nickname crossoverJie

@aphysia

聊聊Go裏面的閉包

以前寫 Java 的時候,聽到前端同學談論閉包,覺得甚是新奇,後面自己寫了一小段時間 JS,雖只學到皮毛,也大概瞭解到閉包的概念,現在工作常用語言是 Go,很多優雅的代碼中總是有閉包的身影,看來不瞭解個透是不可能的了,本文讓我來科普(按照自己水平隨便瞎扯)一下: 1、什麼是閉包? 在真正講述閉包之前,我們先鋪墊一點知識點: 函數式編程 函數作用域 作用域的繼承關係 ## 1.1

aphysia Avatar

@aphysia

Nickname 秦懷雜貨店

@tongbo

go的defer和閉包(例子説明,非內部實現)

用幾個例子説明golang的閉包函數,結合defer使用,配合對應代碼及文末總結。 函數 説明 輸出 e1 defer調用,相當於是拿到了當前err變量的快照,即註冊defer函數的時候,將當下err的值塞入到defer中 start err1 e2 defer 調用,但是一個閉包函數,且閉包函數有傳參,閉

tongbo Avatar

@tongbo

Nickname 牙小木木

@hunter_58d48c41761b8

Golang基礎筆記八之函數

本文首發於公眾號:Hunter後端 原文鏈接:Golang基礎筆記八之函數 本篇筆記介紹 Golang 裏函數相關的內容,以下是本篇筆記目錄: 函數的定義語法 函數返回值 可變參數函數 匿名函數 閉包 1、函數的定義語法 函數的定義格式如下: func 函數名(參數列表) (返回值列表) { 函數體 } 比如下面是一個兩數相加返回其和的函數: func add(a, b in

hunter_58d48c41761b8 Avatar

@hunter_58d48c41761b8

Nickname Hunter

@onlythinking

學習Go語言併發編程

關於併發 Go 語言的創始人Rob Pike 曾説過:並行關乎執行,併發關乎結構。他認為: • 併發是一種程序設計方法:將一個程序分解成多個小片段,每個小片段獨立執行;併發程序的小片段之間可以通過通信相互協作。 • 並行是有關執行的,它表示同時進行一些計算任務。 程序小片段之間通訊不同語言實現不同,比如:傳統語言Java使用共享內存方式達到線程之間通訊,而Go語言channel來進行通

onlythinking Avatar

@onlythinking

Nickname 編程碼農

@jianghushinian

Go 併發控制:sync.WaitGroup 詳解

首發地址:https://mp.weixin.qq.com/s/-FtDLcHW39vgvqSMUVM-yw 前段時間我在《Go 併發控制:errgroup 詳解》一文中講解了 errgroup 的用法和源碼,通過源碼我們知道 errgroup 內部是使用 sync.WaitGroup 實現的,那麼本文就更進一步,來探索下 sync.WaitGroup 源碼是如何實現的。 使用示例 sync.Wa

jianghushinian Avatar

@jianghushinian

Nickname 江湖十年

@jianghushinian

Go 併發控制:sync.Map 詳解

我們知道,Go 中的 map 類型是非併發安全的,所以 Go 就在 sync 包中提供了 map 的併發原語 sync.Map,允許併發操作,本文就帶大家詳細解讀下 sync.Map 的原理。 使用示例 sync.Map 提供了基礎類型 map 的常用功能,使用示例如下: package main import ( "fmt" "sync" ) func main() {

jianghushinian Avatar

@jianghushinian

Nickname 江湖十年

@jianghushinian

Go 併發編程:如何實現一個併發安全的 map

上週發佈的文章「Go 併發控制:sync.Map 詳解」有讀者反饋説我寫的太難了,上來就挑戰源碼,對新手不夠友好。所以這篇文章算作補充,從入門到進階的順序講解一下在 Go 中如何自己實現一個併發安全的 map。 內置 map 首先,我們來測試一下 Go 語言內置 map 併發安全性,示例如下: https://github.com/jianghushinian/blog-go-example/tr

jianghushinian Avatar

@jianghushinian

Nickname 江湖十年

@jianghushinian

在 Go 中如何使用分佈式鎖解決併發問題?

在分佈式系統中,協調多個服務實例之間的共享資源訪問是一個經典的挑戰。傳統的單機鎖(如 sync.Mutex)無法實現跨進程工作,此時就需要用到分佈式鎖了。本文將介紹 Go 語言生態中基於 Redis 實現的分佈式鎖庫 redsync,並探討其使用方法和實現原理。 分佈式鎖 首先我們來探討下為什麼需要分佈式鎖?當我們編寫的程序出現資源競爭的時候,就需要使用互斥鎖來保證併發安全。而我們的服務很有可能不

jianghushinian Avatar

@jianghushinian

Nickname 江湖十年

@user_zsxbv7bi

我所理解的 Go 的 CSP 併發控制機制

你一定聽説過 Go 語言所倡導的這個核心併發原則:“不要通過共享內存來通信,而要通過通信來共享內存 (Don't communicate by sharing memory; instead, share memory by communicating)”。這一理念深刻影響了 Go 的併發設計。 本文將具體討論 Go 中的 併發控制機制 (concurrency control mechanism

user_zsxbv7bi Avatar

@user_zsxbv7bi

Nickname user_zsXbv7Bi

@niandou

腦抽研究生Go併發-1-基本併發原語-下-Cond、Once、Map、Pool、Context

Once 單例對象:在整個應用程序的生命週期中,只有一個實例存在,並提供一個全局統一的訪問點來獲取這個唯一的實例 應用場景:數據庫連接池,全局配置管理器,日誌記錄器 (Logger) Once 是在 Go 語言中實現線程安全的單例模式的完美且最地道的工具 使用 Once 可能出現的 2 種錯誤 第一種錯誤:死鎖 ​ once.Do()中再次調用once.Do() 第二種錯誤

niandou Avatar

@niandou

Nickname 粘豆煮包

@jianghushinian

Go 源碼是如何解決測試代碼循環依賴問題的?

公眾號首發地址:https://mp.weixin.qq.com/s/j5vKNxl2keMF7oPT5M0XnA 最近我寫了一篇講解 context 包源碼的文章《Go 併發控制:context 源碼解讀》,在閲讀源碼的過程中,我在 context 包測試代碼中發現了一個解決循環依賴的小技巧,在此分享給大家。 x_test.go 解決循環依賴 context 包源碼目錄結構如下: https:/

jianghushinian Avatar

@jianghushinian

Nickname 江湖十年

@soroqer

Map 的源碼分析、內存分配、擴容機制-Golang 🔥

Go 語言的 map 是內置的鍵值對(Key-Value)集合類型,是基於哈希表實現的高效數據結構,用於高效存儲和查找數據。其核心特性如下: 無序性:map 中的鍵值對存儲順序不固定,無法通過索引訪問(區別於切片)。 鍵唯一性:鍵(Key)必須唯一,重複插入同一鍵會覆蓋舊值。 動態大小:map 會根據存儲的數據量自動擴容,無需手動管理內存。 通過深入理解 map 的源碼和內存分配,開發者

soroqer Avatar

@soroqer

Nickname soroqer

@soroqer

Channel 的源碼分析與高效使用-Golang 🔥

“不要通過共享內存來通信,而要通過通信來共享內存”。這句話精準概括了 Go 併發模型的核心哲學——而承載這一哲學的核心原語,正是 channel(通道)。 要深入理解 channel,我們需要從 runtime 包的源碼層面分析其核心結構、關鍵操作(創建、發送/接收、關閉)的實現邏輯,以及底層如何通過同步機制(鎖、等待隊列)實現協程(Goroutine)間的安全通信。 以下源碼基於 go1.24.

soroqer Avatar

@soroqer

Nickname soroqer

@gvison

三步搞定 Go 分佈式任務!sasynq 庫讓異步任務變得如此簡單

Go 後台任務的“坑”,你踩過幾個? 在 Go 應用開發中,總有一些任務不適合現場完成,比如: 發郵件/發短信:用户點擊按鈕後,還要乾等?體驗太糟糕! 大計算量任務:生成報表、數據分析,CPU 一直被佔,其他請求全卡住? 定時任務:凌晨跑統計、每小時同步數據,難道要寫個死循環 time.Sleep? 所以,聰明的我們會把這些任務扔進異步任務隊列,讓後台“工人”(Worker)慢慢處理。

gvison Avatar

@gvison

Nickname gvison