—— 為什么 NSQ 的 DiskQueue 不用鎖也能做到高性能、強一致? NSQ 的 diskqueue 是一個極其優(yōu)雅的磁盤持久化 FIFO 隊列實現(xiàn)。它的代碼不多,卻...
—— 為什么 NSQ 的 DiskQueue 不用鎖也能做到高性能、強一致? NSQ 的 diskqueue 是一個極其優(yōu)雅的磁盤持久化 FIFO 隊列實現(xiàn)。它的代碼不多,卻...
前言 在網(wǎng)絡(luò)通信中,TCP 協(xié)議因其可靠性成為主流選擇,但它的 "流式傳輸" 特性卻給消息解析埋下了一個坑 ——黏包與拆包。對于 NSQ 這類消息隊列而言,消息的準(zhǔn)確解析是核...
摘要 本文給出一個落地可執(zhí)行的 Go + DDD 代碼組織方案。包含:分層含義、推薦目錄樹、包命名與文件命名規(guī)范、典型代碼片段(領(lǐng)域?qū)嶓w、倉儲接口、應(yīng)用服務(wù)、適配器/實現(xiàn))、...
前言 在并發(fā)編程、分布式系統(tǒng)或 Web 開發(fā)中,你一定聽過 “Context”(上下文)這個詞。它像一個 “隱形的信使”,在不同組件、函數(shù)或服務(wù)間傳遞關(guān)鍵信息,卻常常因為 “...
前言 在 Go 語言開發(fā)中,錯誤處理是保障程序健壯性的核心環(huán)節(jié)。與 Java、Python 等語言的 “異常捕獲” 機制不同,Go 采用顯式錯誤處理設(shè)計,強調(diào) “錯誤是值” ...
前言 作為剛?cè)腴T Go 的開發(fā)者,很容易帶著其他語言的習(xí)慣寫代碼,比如忽略錯誤、濫用 goroutine,最后導(dǎo)致程序出 bug 卻找不到原因。這篇文章整理了 Go 新手最該...
介紹 robfig/cron[https://github.com/robfig/cron]是Go語言實現(xiàn)的開源定時任務(wù)調(diào)度框架,核心代碼是巧妙的使用chan + selec...
在線編碼、格式轉(zhuǎn)換 前言 日常開發(fā)或運維會比較常遇到日志中的內(nèi)容格式不直觀,需要轉(zhuǎn)碼或格式化的情況,這時候常常是去網(wǎng)上搜索在線工具,不但耗時耗力,又擔(dān)心不安全,于是我索性就自...
背景 有上萬臺邊緣機器,每臺都會有多個agent客戶端,并且每個agent都會同時向中心系統(tǒng)上報數(shù)據(jù),由于上報數(shù)據(jù)頻繁,并發(fā)量也大,每個agent都頻繁和中心建立連接,導(dǎo)致中...
背景 關(guān)于限流Go官方通過一個采用令牌池的算法的實現(xiàn):golang.org/x/time/rate,但是,這個限制的是每秒的請求數(shù),有的時候我們希望限制的是系統(tǒng)并發(fā)處理的請求...
引言 Go內(nèi)置了數(shù)據(jù)庫相關(guān)的庫 - database/sql,實現(xiàn)數(shù)據(jù)庫操作相關(guān)的接口,其中還包含一個很重要的功能 - 連接池,用來實現(xiàn)連接的復(fù)用,限制連接的數(shù)量,從而最大程...
背景 測試一個調(diào)用http接口時,使用了httptest.NewServer來mock一個http服務(wù)端,在驗證響應(yīng)異常狀態(tài)碼時發(fā)現(xiàn)奇怪問題,明明設(shè)置了異常狀態(tài)碼,但是htt...
日期解析 背景 當(dāng)有一個日期字符串(2014-11-12 11:45:26)需要轉(zhuǎn)化為Go的time類型,我們第一時間肯定會想到time包的Parse方法,指定字符串的格式l...
背景 Golang的在開發(fā)web時,會對不同的請求實現(xiàn)不同的hander方法,通常是實現(xiàn)http.HandlerFunc接口: 例如: 這里的handler通常充當(dāng)servi...
最近線上用戶請求時不時返回502,并且沒多大規(guī)律,我們的部署架構(gòu)是Nginx + web應(yīng)用,nginx中的upstream配置了兩個web做負載均衡。 經(jīng)過分析web應(yīng)用,...