# 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=1079
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1179
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=979
go-zero 代碼生成器助你高效開發**
Protocol Buffers 是谷歌推出的編碼標準,它在傳輸效率和編解碼性能上都要優於 JSON。但其代價則是需要依賴中間描述語言 (IDL) 來定義數據和服務的結構(通過 .proto 文件),並且需要一整套的工具鏈(protoc 及其插件)來生成對應的序列化和反序列化代碼。除了谷歌官方提供的工具和插件(比如生成 go 代碼的 protoc-gen-go)外,開發者還可以開發或定製自己的插件 ⌘ Read more
開啓 Go 泛型時代:第三方泛型庫分享**
大家好,我是煎魚。最近 Go1.18 即將發佈,其中包含了一個殺手級的特性:泛型。有了泛型後,就能幹很多奇奇怪怪的事情了。先是配套第三方庫的使用,這是我在初學 Go 時最經常聽到的,就是想說:“如果有泛型,就能幹很多很多的事,就像 PHP array 一樣” 等真香語句。好物分享第 1 篇,定位是純介紹。介紹--今天分享的是已開源的泛型工具庫 github.com/samber/lo,Star 3 ⌘ Read more
Go 分佈式遊戲服務器引擎之服務註冊源碼閱讀**
【導讀】本文介紹了 go 編寫的分佈式開源遊戲服務器引擎服務註冊部分的實現。最近項目的後端需求是全球同服的,在使用語言方面確定了爲 golang 之後,瞭解了一下當前的一些 goalng 遊戲服務器框架,終於在 leaf/pitaya/ 等衆多框架中選擇了 Origin, 主要是因爲它是分佈式框架,微服務架構,比較匹配做全球同服需求下的功能模塊分離。github 地址:https://githubRead more
Gopher 轉 Rust 辣眼睛語法排行榜**
\\| TOP 10 經常忘記寫的分號-----------------fn addwithextra(x: i32, y: i32) - i32 { let x = x + 1; // 語句 let y = y + 5; // 語句 x + y // 表達式}當你是從 golang 剛轉過來,你一定經常忘記寫分號, 對於 Rust 語言而言,區分語句和表達式的方式是非常重要,而且 ⌘ Read more
Go 安裝配置 golint
【導讀】本文介紹了 golint 代碼檢查工具。一. Golint 介紹Golint 是一個源碼檢測工具用於檢測代碼規範 Golint 不同於 gofmt, Gofmt 用於代碼格式化 Golint 會對代碼做以下幾個方面檢查 package 註釋 必須按照 “Package xxx 開頭” package 命名 不能有大寫字母、下劃線等特殊字符 struct、int ⌘ Read more
Golang AES 加密與解密**
【導讀】本文介紹了 Go 服務端 AES 加密解密的實現。RESTful API 設計(Advanced Encryption Standard ,AES)優點 算法公開、計算量小、加密速度快、加密效率高。缺點 發送方和接收方必須商定好密鑰,然後使雙方都能保存好密鑰,密鑰管理成爲雙方的負擔。應用場景 相對大一點的數據量或關鍵數據的加密。加解密package helpe ⌘ Read more
GRPC 連接池的設計與實現**
前言--在分佈式高併發服務器中,client 到 server 以及 server 中的多個節點之間的連接往往使用連接池來管理。簡單來說就是將提前創建好的連接保存在池中,當有請求到來時,直接使用連接池中的連接對 server 端訪問,省去了創建連接和銷燬連接的開銷 (TCP 建立連接時的三次握手和釋放連接時的四次揮手),從而提高了性能。目錄設計原則 基本原理 GRPC 特性 GR ⌘ Read more
【Go Web 開發】發送郵件**
在接下來的幾篇文章中,我們將在 API 中注入一些交互,並調整用戶註冊 API 處理函數 registerUserHandler,以便在用戶成功註冊後向其發送歡迎電子郵件。在這個過程中,我們將討論一些有趣的話題。你將學習:如何在開發中使用 Mailtrap SMTP 服務來發送和監控測試郵件。 如何使用 html/template 包和 Go 1.16 的嵌入文件功能來創建動態易管理的郵件內 ⌘ Read more
適用於 Go 項目的 Makefile 指南**
大家好,我叫謝偉,是一名使用 Go 語言的後端開發者。本文章的主題是: 編寫適用於 Go 項目的 Makefile 指南。1. 前提:會使用 Makefile 會使用 Go 編寫項目 編寫項目的過程中,經常需要對文件進行編譯和執行,查看功能開發或者修復的 Bug 是否正確。你當然可以直接執行 go build 命令用來編譯,執行 go run命令來執行。在編寫 Go 項目其實還會經常執 ⌘ Read more
貝殼 Go 實現的多雲對接存儲網關建設**
1、功能介紹貝殼存儲服務通過 S3 協議向業務方提供文件、圖片、音視頻的存儲及下載。S3 協議由 AWS 推出,在對象存儲行業已經成爲事實標準。騰訊雲對象存儲 COS、阿里雲對象存儲 OSS 均兼容 S3 協議。 S3 協議可以簡單理解爲一套 webapi 接口。通過調用接口,業務方可以進行對象數據的存取。每一個對象數據稱爲一個 object, 以一個唯一的 ID 來標識,object 可以組織 ⌘ Read more
使用 Gin 過程中的一些優化**
原文: https://hongker.github.io/2020/04/01/golang-gin/本文介紹 gin 的一些知識點, 如自定義 Response, 中間件等。gin--- Gin 是一個 go 寫的 web 框架,具有高性能的優點。初級的使用方式不介紹了,具體請查閱官方文檔。官方地址:https://github.com/gin-gonic/gin以下介紹基於 gin 開發項 ⌘ Read more
使用 Golang 玩轉 Docker API
Docker 提供了一個與 Docker 守護進程交互的 API (稱爲 Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進行構建和擴展 Docker 應用程序和解決方案。安裝 SDK------通過下面的命令就可以安裝 SDK 了:go get github.com/docker/docker/client 管理本地的 Docker------------該部 ⌘ Read more
保姆級教程!Golang 微服務簡潔架構實戰**
本文從簡潔架構的理論出發,依託 trpc-go 目錄規範,簡單闡述了整體代碼架構如何劃分,具體 trpc-go 服務代碼實現細節,和落地步驟,並討論了和 DDD 的區別。文章源於我們組內發起的 go 微服務最佳實踐的第一部分,希望從開發和閱讀學習中總結出一套 go 微服務開發的方法論,互相分享一下在尋求最佳的實踐過程中的思考和取捨的過程。本次主要討論目錄如何組織,目錄的組織其實就是架構的設計,一 ⌘ Read more
[譯]Go 語言常用文件操作彙總**
Go 官方提供的文件操作標準庫分散在os、ioutil等多個包中,裏面有非常多的方法涵蓋了文件操作的所有場景,不過因爲我平時開發過程中需要直接操作文件的場景其實並不多,在加上 Go 標準庫的文檔太難搜索,每次遇到要使用文件函數時都是直接 Google 查對應的函數。偶然查到國外一個人在 2015 年寫的博客,他用常用的文件函數彙總了 30 個文件操作場景,包括四大類:基本操作、讀寫操作、文件壓縮、 ⌘ Read more
Go 1-18 新特性:範型**
Go 語言的 1.18 版本還未正式發佈,但我們已經可以用它的 RC 版本嘗試一些新特性。今天來聊聊 Go 1.18 裏的範型(Generics)。安裝--Generics 是 1.18 的新特性,在目前的發佈版 1.17 裏不支持,因此需要手動安裝 RC 版:go install golang.org/dl/go1.18rc1@latest安裝完後,你的GOPATH或者GOBIN裏會出現一個go ⌘ Read more
牙醫教你用 450 行 Go 代碼寫出一個編程語言**
大家好,我是 polarisxu。 沒有系統學習過編譯原理的同學可能會很好奇編程語言的編譯器,Lexer & Parser,虛擬機是怎麼實現的,同時又苦於系統性的教材過於枯燥。如果你之前用的動態語言,可能也不會想到這個層面,但用了 Go 後,想深入 Go 源碼,可能會有相關想法:如何更好地掌握 Go?Go 編譯器到底是怎麼實現的? 其實,在 Github 上有一個項目,教你用 450 行的 G ⌘ Read more
Go 語言基礎之 net-http
【導讀】本文介紹了 go 語言基礎庫 net/http。Go 語言內置的net/http包十分的優秀,提供了 HTTP 客戶端和服務端的實現。net/http 介紹-----------Go 語言內置的net/http包提供了 HTTP 客戶端和服務端的實現。HTTP 協議超文本傳輸協議(HTTP,HyperText Transfer Protocol) 是互聯網上應用最爲廣泛的一種網絡傳輸協議, ⌘ Read more
推薦一款不錯的 Go 持續分析工具**
年前土撥鼠分享了一篇鳥窩老師寫的 Pyroscope: 簡單易用的持續分析 (Continuous profiling) 服務器。今天土撥鼠帶來一篇官方更生動的實例文章。本篇文章翻譯自 Continuous Profiling for Go Applications[1]。翻譯不當之處煩請指出。 源碼地址:https://github.com/pyroscope-io/pyroscope/treRead more
構建 Go 應用 docker 鏡像的十八種姿勢**
修煉背景----我夜以繼日,加班加點開發了一個最簡單的 Go Hello world 應用,雖然只是跑了打印一下就退出了,但是老闆也要求我上線這個我能寫出的唯一應用。項目結構如下:.├── go.mod└── hello.gohello.go 代碼如下:package mainfunc main() {    println("hello world!")}並且,老闆要求用 docker 部署,顯 ⌘ Read more
Golang 的 協程調度機制 與 GOMAXPROCS 性能調優**
【導讀】本文完整介紹了 go 協程的調度機制。前序 正確地認識 G , M , P 三者的關係,能夠對協程的調度機制有更深入的理解!本文將會完整介紹完 go 協程的調度機制,包含: 調度對象的主要組成 各對象的關係 與 分工 gorutine 協程是如何被執行的 內核線程 sysmon 對 gorutine 的管理 gorutine 協程中斷掛起 與 恢復 G ⌘ Read more
Golang 實現延遲消息原理與方法**
【導讀】本文介紹了 Go 實現延遲消息的原理和實現。實現延遲消息最主要的兩個結構:環形隊列:通過 golang 中的數組實現,分成 3600 個 slot。任務集合:通過 map[key]Task,每個 slot 一個 map,map 的值就是我們要執行的任務。原理圖如下:實現代碼如下:package main; import (    "time"    "errors"    "fmt") / ⌘ Read more
go 單例實現—雙重檢測是否安全**
起因今天看到項目中的 kafka 客戶端包裝結構體的獲取是單例模式 br 單例的實現是老生常談的問題了,懶漢餓漢線程安全,因爲看到項目中寫的還是有些問題,網上 go 單例實現的搜索結果比較少經測試也並不靠譜,所以在這記錄下現狀當前有的項目直接使用 Mutex 鎖,有的就直接判斷 nil 則創建,對於前者,每次都加鎖性能差,對於後者則會出現多個實例,也就不是單例了改進進而想要改進一下,在這不討論餓漢 ⌘ Read more
Go 基於 channel 實現的併發安全的字節池**
字節切片[]byte是我們在編碼中經常使用到的,比如要讀取文件的內容,或者從io.Reader獲取數據等,都需要[]byte做緩衝。func ReadFull(r Reader, buf []byte) (n int, err error)func (f File) Read(b []byte) (n int, err error)以上是兩個使用到[]byte作爲緩衝區的方法。那麼現在問題來了,如 ⌘ Read more
使用 Go 語言上線 TensorFlow 模型**
【導讀】本文作者介紹了 Go 語言部署 TensorFlow 模型的實踐。昨天搞了一天用 Go 語言部署 TensorFlow 模型,把整個過程記錄一下,以備大家參考(現在沒有題圖,以後在搞一個圖)。首先我們要有一個已經保存好的 TensorFlow 模型,也就是. pb 文件。這個文件固化了計算圖和權重,Go 語言只需要根據這個代碼跑相應的 Session 就行了。關於如何產生. pb 文件,如 ⌘ Read more
如何讓 Gitlab 私有倉庫支持 Go Get
【導讀】本文介紹了配置 Gitlab 實現私有倉庫的實踐。通常公司都會有自己的 Git 倉庫,可能涉及到利用 go get 進行項目依賴的問題。我們以 Gitlab 作爲私有倉庫爲例,倉庫地址爲:gitlab.com。私有倉庫鑑權設置--------go get 默認採用的 https 下載項目依賴,而私有倉庫一般採用的 ssh key 的方式鑑權,所以直接使用 go get 會出現 https ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之指針**
前言--Hey,大家好呀,我是星期八作爲 21 世紀的 C 語言,Go 可能多方面思考,最終還是保留了指針。但是要比 C 語言指針簡單很多,一起來看看叭。引言--因爲 Go 語言是類 C 語言,所以爲了提高效率,仍然保留了指針。但是如果沒有接觸過指針,可能學起來指針需要多多思考一下了。指針通常情況下,也被稱爲小白勸退神奇。基本類型指針的理解---------先看這兩行代碼。var n1 int = ⌘ Read more
=
【Go Web 開發】基於 IP 限流**
上一篇文章我們介紹了全侷限流,當您希望嚴格對 API 的請求總速率進行限制,並且不關心請求來自何處時,使用全侷限流器可能很有用。但通常更常見的是爲每個客戶端單獨設置一個限流器,這樣可以防止單個客戶端發出太多請求,影響其他客戶端。一種簡單的實現方法是創建一個 map 來爲每個客戶端創建一個限流器映射,使用每個客戶端的 IP 地址作爲 map 的鍵。當一個新客戶端向 API 發出請求時,我們將初始化一 ⌘ Read more
Golang Websocket 實踐**
這裏先簡單介紹一下 websocket,確實只是簡單介紹一下。應用場景-------有些場景下,比如交易 K 線,我們需要前端對後端進行輪詢來不斷獲取或者更新資源狀態。輪詢的問題毫無以爲是一種笨重的方式,因爲每一次 http 請求除了本身的資源信息傳輸外還有三次握手以及四次揮手。替代輪詢的一種方案是複用一個 http 連接,更準確的複用同一個 tcp 連接。這種方式可以是 http 長連接,也可以 ⌘ Read more
一款 Go API 神器 Apifox
作爲軟件開發從業者,API 調試是必不可少的一項技能,在這方面 Postman 做的非常出色。但是在整個軟件開發過程中,API 調試只是其中的一部分,還有很多事情 Postman 無法完成,或者無法高效完成,比如:API 文檔定義、API Mock、API 自動化測試等等。Apifox 就是爲了解決這個問題而生的。接口管理現狀------一、常用解決方案使用 Swagger 管理 API 文檔 ⌘ Read more
【Go Web 開發】API 限流**
如果您正在構建公共使用的 API,那麼很可能需要實現某種形式的限流,以防止客戶端過快地發出大量請求,從而給服務器帶來很大的壓力。接下來的內容我們將創建中間件來實現這一點。本質上,這個中間件檢查在過去 N 秒鐘內服務器接收到多少請求,如果請求太多就向客戶端發送 "429 Too Many Requests" 響應。我們需要將這個中間件放在業務處理程序之前,對請求被處理之前進行攔截,避免對請求進行 J ⌘ Read more
使用 golang 進行證書籤發和雙向認證**
【導讀】本文介紹 go 語言實現認證的思路。前言--數字證書是一個經證書授權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。證書籤發涉及到了非對稱加密方面的知識, 這裏介紹使用 golang 中的 x509 標準庫進行證書自簽發, 還有證書籤發後如何使用 golang 進行雙向認證.自簽發證書-----生成根證書根證書是 CA 認證中心給自己頒發的證書, 是信任鏈的起始點. 這裏我們自己做 ⌘ Read more
Go 語言 socket 框架之心跳處理**
【導讀】本文介紹了 socket 心跳處理的設計和實現。前言:---本次我們來講解怎麼在自己的框架裏面增加心跳處理。已經把所有代碼整合了,希望給個星星支持一下 GitHub - mistaker/microSocket: 同時支持 socket 和 websocket 的框架。心跳處理的必要性:---------服務端需要同時處理上千甚至上萬的客戶端的連接,所以每個連接資源都是很寶貴的,當客戶端斷 ⌘ Read more
golang 的幾種協程終止方法和區別**
1, return結束當前函數, 並返回指定值, defer 調用會執行;這裏需要引申出來一個知識點 --return 和 defer 的執行順序問題, 先看一段代碼:package mainimport "fmt"func main() { fmt.Println("f1 result: ", f1()) fmt.Println("------") fmt.Println("f2 result: ⌘ Read more
Go WebAssembly -Wasm- 簡明教程**
源代碼 / 數據集已上傳到 Github - 7days-golang1 WebAssembly 簡介-------------------------------------------------------- WebAssembly 是一種新的編碼方式,可以在現代的網絡瀏覽器中運行 - 它是一種低級的類彙編語言,具有緊湊的二進制格式,可以接近原生的性能運行,併爲諸如 C / C ++ ⌘ Read more
源碼閱讀:VictoriaMetrics 中的 golang 代碼優化方法**
VictoriaMetrics 監控組件(以下簡稱 VM)號稱比 Prometheus 快了至少 3 倍,內存佔用比 Prometheus 小了 7 倍。 爲什麼能快這麼多呢?下面是閱讀 vm-storage 源碼後的心得:1.CPU 和併發基於可用的 CPU 核數來規劃併發-----------------see:victoria-metrics-1.72.0/blob/master/Vict ⌘ Read more
用 Go 構建你專屬的 JA3 指紋**
在這篇文章中將會簡單回顧 https 的握手流程,並基於讀者的提問題解釋什麼是 JA3 指紋以及如何用 Go 定製專屬的 JA3 指紋。本文大綱如下,請各位讀者跟着老許的思路逐步構建自己專屬的 JA3 指紋。回顧 HTTPS 握手流程在正式開始瞭解什麼是 JA3 指紋之前,我們先回顧一下 HTTPS 的握手流程,這將有助於對後文的理解。在碼了 2000 多行代碼就是爲了講清楚 TLS 握手流程這篇 ⌘ Read more
分佈式任務調度系統之任務編排及工作流實現原理與 golang 實踐**
I. 內容提要定時調度系統(定時任務、定時執行)算是工作中經常依賴的中間件系統,簡單使用操作系統的 crontab,或基於 Quartz,xxl-job 來搭建任務調度平臺,行業有很多優秀的開源產品和中間件。瞭解其工作和設計原理,有助於我們完善或定製一套適合公司業務場景的任務調度中間件,之前寫了兩篇文章介紹了調度負載均衡和定時延時任務的內容,可以參考。 分佈式調度分發負載均衡及服務保持 ⌘ Read more
微服務高可用之熔斷器實現原理與 Golang 實踐**
I. 內容提要在微服務架構中,經常會碰到服務超時或通訊失敗的問題,由於服務間層層依賴,很可能由於某個服務出現問題,不合理的重試和超時設置,導致問題層層傳遞引發雪崩現象,而限流和熔斷是解決這個問題重要的方式。之前發過一篇文章講了限流的幾種實現方案,具體參閱: 分佈式高併發服務限流實現方案今天我們探討熔斷的話題,本章內容提要: 微服務高可用容錯機制 熔斷器設計原理及 Golang 實現 ⌘ Read more
Golang 微服務工具包 Go kit
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹Go kit 是 Go 包的集合,可幫助您構建健壯、可靠、可維護的微服務。它最初被設想爲一個工具包,以幫助大型(所謂的現代企業)組織採用 Go 作爲實現語言。但它很快就 "向下增長",現在也爲較 ⌘ Read more
Go 語言與紅黑樹**
一. 算法之變,結構爲宗計算機在很多情況下被應用於檢索數據,比如航空和鐵路運輸業的航班信息和列車時刻表的查詢,都要求快速地找到用戶所需要的信息。所以,對於存儲大量信息的計算機來說,能 “大量存” 固然好,但同時還必須能 “快速取” 纔行。又比如,我們在使用 C++ 或者 Java 這樣的編程語言時,都會用到標準模版類庫,因爲它們簡潔高效,能提供動態增長的各類數據結構,極大地提高了開發效率,同時又保 ⌘ Read more
Leecode-Go - 矩陣置零(字符串相關)**
現在給定兩個字符串,分別是 ransomNote 和 magazine,當前需要我們做的是判斷 ransomNote 能不能由 magazine 裏面的字符構成,如果可以的話,需要我們返回 true,否則就需要返回 false,需要我們注意的是,magazine 中的每個字符只能在 ransomNote 中使用一次。可以提示的內容如下:1 <= ransomNote.length, magazin ⌘ Read more
=
GO 的優雅終止姿勢**
最近優化了一版程序:用到了 golang 的優雅退出機制。程序使用 etcd 的election sdk做高可用選主,需要在節點意外下線的時候,主動去 etcd 卸任 (刪除 10s 租約), 否則已經下線的節點還會被 etcd 認爲是 leader。所以在這裏,優雅退出是技術剛需。另外根據《雲原生十二要素方法論》 第 9 條: 快速啓動和優雅終止可最大化健壯性 , 也推薦各位遵守實踐。 Fas ⌘ Read more
Go 原生網絡輪詢器(netpoller)剖析**
關於 C10KC10K 問題是上個十年的問題,C10K 的意思就是服務端單機不能承受超過 1w 個客戶端連接,就算擴容對應的 CPU、內存的物理資源也無效,在 2022 年看來,這個問題看起來很奇怪,現在各個大廠吹噓的不都是百萬甚至千萬連接的服務器嗎?1w 連接算啥?以史爲鑑, 可以知興替我們可以瞭解下當初 C10K 問題的背景是啥,瓶頸在什麼地方,再用發展的眼光看待問題,可以收穫更多。一個服務器 ⌘ Read more
Go 語言中淺拷貝和深拷貝的區別是什麼?**
要想搞明白深拷貝和淺拷貝的區別,我們需要先弄懂以下幾點: 一、值類型和引用類型----------Go 語言裏面變量有兩類,一類是值類型,一類是引用類型。兩者區別是什麼呢?我們在電腦裏面創建的變量,都是需要內存來存放的。值變量就是直接,一個內存地址對應一個值。而引用變量,則是某個值存放的是另一個值的地址。我畫了一個邏輯圖,幫助我們去理解這個概念。在 Go 語言中:string、int、bool、 ⌘ Read more
go 語言的類型系統和接口**
【導讀】本文梳理了 Go 語言的類型,並結合了反射進行介紹。類型--go 語言的類型分爲內置類型和自定義類型,以及類型別名。內置類型go 語言的內置類型是語言層面的底層實現,語法規定好的一些類型,具體有哪些內置類型可以看源碼中用於文檔的虛擬的 builtin 包:https://github.com/golang/go/blob/master/src/builtin/builtin.go自定義類型Read more
rsc 大爆料:Go 源碼的那些有趣歷史**
大家好,我是 polarisxu。前段時間,我寫過一篇文章:驚呆了!Go 代碼的第一次提交竟然是 1972 年。。。最近,Go 社區又有其他夥伴提起這事,而且 Russ Cox (rsc) 發現每隔一段時間總會有人提到這個 1972 年。最近 rsc 終於忍不住發話了:專門在自己的博客撰文分享了 Go 的版本控制歷史。以下是該文的內容提要。首先,rsc 認爲 Go 第一次代碼提交是 1972 年的 ⌘ Read more
關於 Golang 和 Rust 對比及語言的選擇思考**
作爲現在已經作爲互聯網企業高性能 API 標配的 Go 語言,以及在成長路上的 Rust 語言,都是互聯網後端工程師重要選擇的兩個語言,也是很多人拿來做對比的兩個語言,那麼實際場景裏應該如何選擇呢。     沒有萬能的語言(當然可以說 C 是萬能的),只有適用某個時代或某個場景的語言。比如你用 Python 做高性能服務就挺麻煩的,用 C 語言做 Web 開發寫 CGI 也是有點費勁的, ⌘ Read more
一天一語言:快速入門 Go 語言**
因爲在看 docker 源代碼,必須需要了解 Go 語言,所以做了一些學習和記錄,主要記錄兩者不同的地方。根據實際代碼閱讀中的問題而來,省略了和 C 語言相同的部分, 乾貨滿滿。 Go 語言定義類型和變量名,方向和一般語言是反的,這點我覺得簡直是反人類,非要搞個不一樣的顯示自己多牛牪犇關鍵字GOROOT GO 語言安裝路徑 GOPATH 代碼包所在路徑, 安裝在 ⌘ Read more
Golang 二進制文件混淆保護**
【導讀】本文介紹了作者避免開發者信息泄露的思路。Go 實在是太棒了。一處編譯,處處運行,沒有依賴,毫無麻煩!不過麻煩的事情來了。我們寫一個程序,就是想在別人的電腦上運行的。然而,Go 語言的默認機制,會泄漏我們的一些信息,雖然不多,但也有點尷尬。本文結合網上的一些常用方法,總結出一套通用的簡單易行的保護措施。刪除調試符號默認情況下 go 編譯出的程序在運行出錯時會輸出自己在哪個線程哪個文件哪個函數 ⌘ Read more
深入理解 Golang Stack
一、基礎知識(一)Linux 進程地址空間佈局我們知道 CPU 有實模式和保護模式,系統剛剛啓動的時候是運行在實模式下,然後經過一系列初始化工作以後,Linux 會把 CPU 的實模式改爲保護模式(具體就是修改 CPU 的 CR0 寄存器相關標記位),在保護模式下,CPU 訪問的地址都是虛擬地址 (邏輯地址)。Linux 爲了每個進程維護了一個單獨的虛擬地址空間,虛擬地址空間又分爲“用戶空間” 和 ⌘ Read more
Golang 簡潔架構實戰**
作者:bearluo,騰訊 IEG 運營開發工程師 文中項目代碼位置:https://github.com/devYun/go-clean-architecture由於 golang 不像 java 一樣有一個統一的編碼模式,所以我們和其他團隊一樣,採用了 Go 面向包的設計和架構分層這篇文章介紹的一些理論,然後再結合以往的項目經驗來進行分包:├── cmd/│   └── main.go // ⌘ Read more
3 分鐘帶你用 Go 語言實現枚舉**
Go 語言是沒有 enum 這個枚舉關鍵字的。 那 Go 語言裏面又是怎麼處理枚舉這個問題的呢?我們這篇文章講解下!需要枚舉的場景-------我們在處理人的姓名的時候,一般都是男或者女,或者最大再加一個未知,不會有其他類型吧。像上面這種常見,我們一般就會使用枚舉處理。我們會定義一個變量,希望他能只能賦 男、女、未知 這三種值。如果是在其他語言:from enum import Enumclas ⌘ Read more
Golang Profiling: 關於 pprof
golang 自身提供的工具中包括性能分析工具 - pprof。這個工具被實現在兩個位置:runtime/pprof:採集器,負責採集應用程序的運行數據供給 pprof 可視化工具 net/http/pprof:通過一個 HTTP Server 將 prof 數據進行可視化分析。 golang 內建提供了多種性能收集器,它們負責收集這些性能數據:Goroutine: stack tra ⌘ Read more
Golang 語言 gRPC 服務怎麼同時支持 gRPC 和 HTTP 客戶端調用?**
01介紹關於 gRPC 的文章,我們之前寫過幾篇,如果讀者朋友還對 gRPC 不瞭解,我建議您可以翻閱一下公衆號的歷史文章。當我們需要提供 gRPC 服務的 RESTful API 時,可以先創建一個 gRPC 客戶端服務,在 gRPC 客戶端服務編寫 RESTful API,接收到 HTTP 請求時,通過 gRPC 客戶端服務調用 gRPC 服務端服務的方法。相信讀者朋友們也意識到,僅僅爲了提供 ⌘ Read more
Go1-18 新特性:高效複製,strings- bytes 標準庫新增 Clone API
大家好,我是煎魚。Go1.18 過幾周(3 月份)就要發佈了,先前我們已經更新了好幾期新版本特性,今天給大家帶來一個新的優化類的內容,是與 strings 和 bytes 標準庫有關。背景--想要更快捷複製在日常編程中,字節 []byte 是經常需要複製的。需要寫以下代碼:dup := make([]byte, len(data))copy(dup, data)@Ilia Choly 覺得這就太麻 ⌘ Read more=
golang 反射(reflect)**
golang 反射(reflect)------------------反射是現代程序必備的元素,用於在 運行時 獲取程序元素,如對象等的 元數據,實現動態識別類型及其結構,以及相關的語義信息。反射在程序中應用非常多,例如:動態生成數據:json 序列化 / 反序列化;orm 映射, proxy 透明代理對象 動態調用方法:plugin 實現 框架自動處理程序:annotation t ⌘ Read more
「2022 版」輕鬆搞定 Go 開發環境**
大家好,我是 polarisxu。實話說,這個時候還寫這麼基礎的文章,感覺有點太 low?但幾乎每天有人開始學習 Go,那自然繞不開搭建 Go 開發環境。很多人會通過搜索網上的教程來照着做,於是發現搞不定,原因是找到的教程大部分比較老舊,都是基於 GOPATH 的。隔段時間我就會看到有人問類似的問題,所以才決定寫一篇 2022 版 Go 開發環境搭建。 提醒一句,入門教程涉及到代碼放入 src ⌘ Read more
golang 使用 Zap 日誌庫**
簡要說明-------zap 是 uber 開源的 Go 高性能日誌庫,支持不同的日誌級別, 能夠打印基本信息等,但不支持日誌的分割,這裏我們可以使用 lumberjack 也是 zap 官方推薦用於日誌分割,結合這兩個庫我們就可以實現以下功能的日誌機制:能夠將事件記錄到文件中,而不是應用程序控制臺; 日誌切割能夠根據文件大小、時間或間隔等來切割日誌文件; 支持不同的日誌級別, ⌘ Read more
Go 爲什麼不支持可重入鎖?**
大家好,我是煎魚。程序裏的鎖,是很多小夥伴在寫分佈式應用時用的最多的一個利器之一。使用 Go 的同學裏,絕大部分都有其他語言的經驗,就會對其中一點有疑惑,那就是 Go 裏的鎖,竟然不支持可重入?爲此,今天煎魚帶大家一起來了解這裏的設計考量,看看爲什麼。可重入鎖----如果對已經上鎖的普通互斥鎖進行 “加鎖” 操作,其結果要麼失敗,要麼會阻塞至解鎖。鎖的場景如下:在加鎖上:如果是可重入互斥鎖,當前嘗 ⌘ Read more
Golang 中的 RESTful API 最佳實踐**
【導讀】本文結合 Go Web 再次梳理了 RESTful API 的相關最佳實踐。RESRful API 已經流行很多年了,我也一直在使用它。最佳實踐也看過不少,但當一個項目完成,再次回顧 / 梳理項目時,會發現很多 API 和規範還是多少有些出入。在這篇文章中,我們結合 Go Web 再次梳理一下 RESTful API 的相關最佳實踐。示例完整代碼在這裏 https://github.comRead more
Golang 前後端分離項目 OAuth2 教程**
什麼是 OAuth2----------OAuth2.0 是 OAuth 協議的下一版本, 但不向後兼容 OAuth 1.0 即完全廢止了 OAuth1.0. OAuth 2.0 關注客戶端開發者的簡易性. 要麼通過組織在資源擁有者和 HTTP 服務商之間的被批准的交互動作代表用戶, 要麼允許第三方應用代表用戶獲得訪問的權限. 同時爲 Web 應用, 桌面應用和手機, 和起居室設備提供專門的認證流 ⌘ Read more
Golang 實現 JWT 認證**
認證是讓應用知道給應用發送請求的人是他所說的那個人。JSON web token (JWT) 是認證的一種方式,相比於基於 Session 認證,在系統中並不存儲任何關於用戶信息。本文演示使用 Golang 實現基於 JWT 認證的示例應用。JWT------1.1. JWT 格式假設用戶user1嘗試登錄應用,成功後收到 token 信息如下:eyJhbGciOiJIUzI1NiIsInR5 ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之接口(上篇)**
前言--Hey,大家好呀,我是碼農,星期八,之前怎麼學到過面向對象的相關知識,但是還差一點,差了個接口。並且接口在代碼中用的還是比較多的,一起來看看吧!什麼是接口 (interface)這裏的接口,可不是說那種插槽的那種接口,互相懟到一塊就完事了。在各種語言中,提到接口,通常指的之一種規範,然後具體對象來實現這個規範的細節。本文使用的接口主要是約束接口,還有一種存儲接口。注:在 Go 中,接口 ( ⌘ Read more
Go 函數何時使用帶參數名的返回值**
01 具名返回值簡介在 Go 語言中定義方法或函數時,我們不僅可以給函數(或方法)的返回值指定返回類型,而且也可以指定返回參數的名字。如下函數就指定了返回值的名字:func f(a int) (b int) {    b = a return}在這種使用方式中,返回值參數(這裏是 b)首先會被初始化成返回類型的零值(這裏 int 的零值是 0)。其次,在 return 語句中可以不加任何參數 ⌘ Read more
=
Go 語言碎碎念:併發**
免責聲明----讀者不會從這篇文章看到:Goroutine 的默認棧空間大小是多少,協程和線程有什麼區別。 某 API 調用之異步與同步,阻塞與非阻塞。 select 或 runtime.gopark() 的源碼解析。 Go 和 Java 比哪個快? Go 的背景------Go 語言初創團隊三劍客分別是:Ken Thompson, Rob Pike 和 Robert Gr ⌘ Read more
分享一個 Go 應用的可視化持續採樣分析的開源方案**
之前分享了兩篇 Go 服務自己持續採樣的應用和設計原理的文章。學會這幾招讓 Go 程序自己監控自己 Go 服務進行自動採樣性能分析的方案設計與實現 今天繼續這個話題,除了我們自己實現和用 Holmes 外,如果想搞的重一點,比如支持可視化之類的,可以試試今天介紹的這個開源庫 -- pyroscope 。 本篇文章翻譯自 Continuous Profiling for Go Ap ⌘ Read more
Go GraphQL 教程**
一般的 Web 開發都是使用 RESTful 風格進行 API 的開發,這種 RESTful 風格的 API 開發的一般流程是:需求分析 模型設計 編碼實現 路由設計: 參數操作:校驗、請求 響應:JSON 格式、狀態碼 一種資源一般都可以抽象出 4 類路由,比如投票接口: 獲取所有投票信息GET /v1/api/votes 獲取單個投票信息GET /v1/ap ⌘ Read more
淺析 gowatch 監聽文件變動實現原理**
剛開始接觸 go 時,發現 go 程序和 php 程序的其中一個不同是 php 是解釋性語言,go 是編譯型語言,即每次在有程序改動後,需要重新運行 go run 或 go build 進行重新編譯,更改才能生效,實則不便。於是乎在網絡上搜索發現了 gowatch 這個包,該包可通過監聽當前目錄下相關文件的變動,對 go 文件實時編譯,提高研發效率。那 gowatch 又是如何做到監聽文件變化的呢 ⌘ Read more
二叉樹、紅黑樹以及 Golang 實現紅黑樹**
二叉搜索樹(二叉查找樹)------------二叉查找樹也叫二叉搜索樹,也叫二叉排序樹,它具有以下特點:1\\. 如果左子樹不爲空,則左子樹上的結點的值都小於根節點;2. 如果右子樹不爲空,則右子樹上的結點的值都大於根節點;3. 子樹同樣也要遵循以上兩點。二叉樹的遍歷方式二叉樹的遍歷方式:前序遍歷、中序遍歷、後序遍歷和層序遍歷(MySql)。只要一棵樹是二叉查找樹,那麼它的中序遍歷(左根右輸出)一定 ⌘ Read more
如何正確使用 go 中的 Context
大家好,我是漁夫子。今天跟大家聊聊 context 的設計機制及如何正確使用。01 爲什麼要引入 Contextcontext.Context 是 Go 中定義的一個接口類型,從 1.7 版本中開始引入。其主要作用是在一次請求經過的所有協程或函數間傳遞取消信號及共享數據,以達到父協程對子協程的管理和控制的目的。需要注意的是 context.Context 的作用範圍是一次請求的生命週期,即隨着請求 ⌘ Read more
使用 Golang 進行函數式編程**
爲什麼要用 Go 練習函數式編程?簡而言之,正是由於缺少狀態和可變數據,函數式編程使您的代碼更易讀,更易於測試且不太複雜。如果遇到錯誤,只要不違反函數式編程規則,就可以快速調試應用程序。當函數被隔離時,您不必處理影響輸出的隱藏狀態的更改。軟件工程師兼作者 Eric Elliot 定義了以下函數編程。 函數式編程是通過組合純函數,避免共享狀態,可變數據和副作用來構建軟件的過程。函數式編程是聲明性的 ⌘ Read more
Go 裏面爲啥特喜歡用 []byte?**
Go 語言裏面沒有繼承, 想進一步剖析 byte 這個類型,我就需要更進一步的瞭解 type 這個關鍵字。更進一步認識 type 關鍵字---------------我們在寫 go 代碼,定義結構體 type 這個關鍵字是必用。比如:type Student structtype 除了能定義自己的結構體之外,還支持重新定義現有的類型。比如:type String string這樣做有啥好處呢?最重 ⌘ Read more
CGO 讓 Go 與 C 手牽手,打破雙方 “壁壘”!**
導語 \\| Go 作爲當下最火的開發語言之一,它的優勢不必多說。Go 對於高併發的支持,使得它可以很方便的作爲獨立模塊嵌入業務系統。大量的 C/C++ 存量代碼出現,如何將 Go 和 C/C++ 進行打通尤爲重要。Golang 自帶的 CGO 可以支持與 C 語言接口的互通。本文首先介紹了 CGO 的常見用法,然後根據底層代碼分析其實現機制,最後在特定場景下進行 CGO 實踐。一、CGO 快速入門( ⌘ Read more
學到了!將緩衝 channel 當做 Mutex 來使用**
via: https://mipsmonsta.medium.com/golang-using-buffered-channel-like-a-mutex-9c7c80ec5c27 作者:Mipsmonsta大家好,我是四哥。 原文如下: 作爲 Go 官方包的一部分,sync 包有下面這段聲明: sync 包提供了基本的同步原語,例如互斥鎖。除了 Once 和 WaitGroup 類型之外 ⌘ Read more
Go gcache 源碼分析**
【導讀】本文對本地緩存庫 gocache 做了詳細分析。gcache 是一個用 go 實現的併發安全的本地緩存庫。他可以實現如下功能:指定緩存的的大小,初始化之時爲 cache 設置 size 大小。 支持多種緩存的策略:Simple、LRU、LFU、ARC Simple:最普通的緩存策略,根據先存入的先淘汰。 LUR:Least Recently Used,意思是最近最少使用。 ⌘ Read more
Go 切片與技巧(附圖解)**
你好,我是太白,今天和你聊聊 Go 語言的切片(Slice)以及它的一些技巧。1 前言----切片是 Go 語言中最多被使用的數據結構之一。本文將介紹切片的創建、操作、表達式以及使用的技巧。2 數組----slice 類型是建立在 Go 的數組類型之上的抽象,因此要理解 slice,我們必須首先理解數組。先看一段代碼: var a [4]int // 數組類型: 定義指定長度和元素類型 a[0] ⌘ Read more
golang 面試總結**
前言前段時間找工作搜索 golang 面試題時,發現都是比較零散或是基礎的題目,覆蓋面較小。而自己也在邊面試時邊總結了一些知識點,爲了方便後續回顧,特此整理了一下。相比較於其他語言, Go 有什麼優勢或者特點?Go 允許跨平臺編譯,編譯出來的是二進制的可執行文件,直接部署在對應系統上即可運行。 Go 在語言層次上天生支持高併發,通過 goroutine 和 channel 實現。channe ⌘ Read more
Go 語言微服務實戰之 API 網關**
【導讀】本文介紹了用 Go 語言編寫 API Gateway 所需的技術和設計。上一篇文章我們用 etcd 做爲服務發現組件,替換了 micro 默認的基於 mnds 的服務發現,並簡單通過跟蹤源碼瞭解了服務註冊以及發現的原理。這篇文章,我們來認識微服務架構中另外一個很常見的東東:API Gateway。1、API 網關是什麼-----------我們把一個應用拆分成了一個一個的微服務後,客戶端如 ⌘ Read more
golang 源碼閱讀之會議系統 ion part I
https://github.com/pion/ion 是用 go 實現的會議系統,它基於 go 實現的消息隊列 nats 和 redis,官網文檔 https://pionion.github.io/docs/awesome-ion/awesome-ion 很簡明扼要,本地搭建:./scripts/depsinst./scripts/all start./scripts/all ⌘ Read more
Golang 語言 vendor 在 GOPATH 和 Modules 中的區別**
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹在 Golang 語言中,Golang 程序是由 Golang Package 組成的,go build 的過程實際上就是編譯 Golang Package。本文我們介紹 Golang 構建模式 ⌘ Read more
Golang 在大規模流處理場景下的最小化內存使用**
作爲公司平臺團隊的一員,我接觸了很多文件處理的場景,比如管理一個通用文件上傳中心服務,處理郵件附件,處理和導出大文件。在過去,這項工作要容易得多,因爲我們可以完全支配整個服務器。我們可以寫入一個文件讓它持久化在服務器磁盤上,儘管這個作業所需的資源是非常多的。而現在,你的代碼庫是在更小的處理單元上發佈的,比如 pods 。它的資源是虛擬分配的,並且在許多情況下是有限的,所以你需要知道如何有效地使用它 ⌘ Read more
go-monitor: 服務質量統計分析告警工具**
【導讀】本文介紹了一款開源 go 語言監控項目。go-monitor基於golang開發,是一個輕量的,用於服務質量監控並實現分析告警的工具。go-monitor目前並不是一個獨立的服務,而是希望被大多數基於golang開發的項目如同引入一個日誌組件一樣使用。 go-monitor能做什麼通過上報接口、函數、或者是任意調用服務的耗時以及其成功狀態,go-monitor將按照設定的週期自動進行服務 ⌘ Read more
Golang 從零搭建 LevelDB
【導讀】作者介紹了使用 Go 語言從零開始構建 KV 數據庫 LevelDB 的實踐。如今 KV 數據庫已經成爲工作中必不可少的一種數據存儲模式,首先聯想到的就是高併發的代表 --Redis,其已經征服了各種領域,如高性能緩存、分佈式鎖、熱點數據存儲等。與 Redis 遙相呼應就是持久型 (文件)KV 數據庫 RocksDB,談論 RocksDB 將是一個浩大的工程,而 RocksDB 是基於 L ⌘ Read more
使用 Go 實現一個簡單的事件總線模式**
事件驅動架構是計算機科學中一種高度可擴展的範例。它允許我們可以多方系統異步處理事件。事件總線是發佈 / 訂閱模式的實現,其中發佈者發佈數據,並且感興趣的訂閱者可以監聽這些數據並基於這些數據作出處理。這使發佈者與訂閱者松耦合。發佈者將數據事件發佈到事件總線,總線負責將它們發送給訂閱者。傳統的實現事件總線的方法會涉及到使用回調。訂閱者通常實現接口,然後事件總線通過接口傳播數據。使用 go 的併發模型, ⌘ Read more
Go bufio-Reader 結構 - 源碼詳解 I
關注不迷路,一起 From Zero To Hero ! 前言 -----之前的兩篇文章, Go 語言 bytes.Buffer 源碼詳解之 1,Go 語言 bytes.Buffer 源碼詳解 2,我們介紹了 bytes.buffer,它是一個字節緩衝區,我們可以將數據先寫到到緩衝區再進行處理。但是 bytes.buffer 並沒有提供對底層文件操作的相關接口(ReadFrom 會將整個文件內 ⌘ Read more
Go 語言 bytes-Buffer 源碼詳解 2
前言--前面一篇文章 Go 語言 bytes.Buffer 源碼詳解之 1,我們學習了 bytes.Buffer 的結構和基礎方法,瞭解了緩衝區的運行機制,其中最重要的是要理解整個結構被分爲了三段:已讀數據、未讀數據、空閒部分,忘記的小夥伴再複習下哦。緩衝區的存在,就是爲讀寫服務的,那麼本篇文章我們就一起來學習下讀寫方法是如何利用緩衝區實現的吧!Buffer 結構示意圖源碼分析----Write( ⌘ Read more
帶你十天輕鬆搞定 Go 微服務之大結局(分佈式事務)**
序言------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ⌘ Read more
【Go Web 開發】數據庫安裝與配置**
備註:【Go Web 開發】是一個從零開始創建關於電影管理的 Web 項目。接下來的內容,我們將繼續我們的項目,安裝並配置一個 SQL 數據庫來持久存儲客戶端發送的 movie 數據。這裏我們將使用 PostgreSQL 數據庫。它是開源的,非常可靠,並且具有一些獨特的新特性——包括支持數組和 JSON 數據類型、全文搜索和地理空間查詢。在項目開發過程中,我們將使用這些新的 PostgreSQL ⌘ Read more
帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)**
序言--我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:環境搭建:帶你十天輕鬆搞定 Go 微服務系列(一) 服務拆分:帶你十天輕鬆搞定 Go 微服務系列(二) 用戶服務:帶你十天輕鬆搞定 Go 微服務系列(三) 產品服務:帶你十天輕鬆搞定 Go 微服務系列(四) 訂單服務:帶你十天輕鬆搞定 Go 微服務系列(五) ⌘ Read more
Golang MGP 調度器**
【導讀】本文詳細介紹了 Go 語言的 MGP 模型中調度器的設計和演進。Go 調度器我們知道 Go 裏面有成千上萬 coroutine 需要調度執行,而這裏面起關鍵作用的就是 Go 的調度器,那麼 Go 的調度器在哪裏呢?因爲我們寫 Go 代碼的時候從未顯式創建過調度器實例。爲了瞭解調度器,我們先來了解下 Go 的運行時(Runtime)。爲什麼要有 Runtime-------------開銷上 ⌘ Read more
一文看懂 Go 泛型核心設計**
大家好,我是煎魚。Go1.18 的泛型是鬧得沸沸揚揚,雖然之前寫過很多篇針對泛型的一些設計和思考。但因爲泛型的提案之前一直還沒定型,所以就沒有寫完整介紹。如今已經基本成型,就由煎魚帶大家一起摸透 Go 泛型。本文內容主要涉及泛型的 3 大核心概念,非常值得大家深入瞭解。如下:類型參數。 類型約束。 類型推導。 類型參數----類型參數,這個名詞。不熟悉的小夥伴咋一看就懵逼了。 ⌘ Read more
帶你十天輕鬆搞定 Go 微服務系列(八、服務監控)**
序言--我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:環境搭建:帶你十天輕鬆搞定 Go 微服務系列(一) 服務拆分:帶你十天輕鬆搞定 Go 微服務系列(二) 用戶服務:帶你十天輕鬆搞定 Go 微服務系列(三) 產品服務:帶你十天輕鬆搞定 Go 微服務系列(四) 訂單服務:帶你十天輕鬆搞定 Go 微服務系列(五) ⌘ Read more
你想在 Go 2 中看到什麼?**
閱讀完文章,如果你也有想在 Go2 中看到的特性,歡迎留言討論。目錄 關於作者 現代模板引擎 改進 range,以免 Copy 值 確定性的 select 結構化日誌記錄接口 多錯誤處理 針對 JSON Marshal 的 error 標準庫中不再有公共變量 對緩衝渲染器的本地支持 結束語 Go 是我最喜歡的編程語言之一,但它仍 ⌘ Read more
10 款優雅的 Go 語言開發工具**
jaxenter 從 GitHub 上精選了一些最好 Golang 工具,希望可以爲喜歡用 Go 編程的開發者提供幫助,一起來看一下都有哪些工具上榜吧! 有些工具可能用的人越來越少,肯定也還有其他好用的工具沒列出,歡迎補充!1、Go Reviverevive是一個 Go 語言的代碼質量檢測工具 (Linter for Go),具有快速、可配置、可擴展、靈活和美觀等特性,可作爲 golint 的替 ⌘ Read more
關於 Go 併發編程,你不得不知的 “左膀右臂”——併發與通道!**
併發編程,可以說一直都是開發者們關注最多的主題之一。而 Golang 作爲一個出道就自帶 “高併發” 光環的編程語言,其併發編程的實現原理肯定是值得我們深入探究的。本文主要介紹 Goroutine 和 channel 的實現。Go 併發編程模型在底層是由操作系統所提供的線程庫支撐的,這裏先簡要介紹一下線程實現模型的相關概念。一、線程的實現模型線程的實現模型主要有 3 個,分別是:用戶級線程模型、內 ⌘ Read more
Graphql Go 基於 Golang 實踐**
【導讀】Go 語言如何使用 Graphql 操作數據庫?本文做了詳細介紹。GraphQL------- GraphQL 既是一種用於 API 的查詢語言也是一個滿足你數據查詢的運行時。GraphQL 對你的 API 中的數據提供了一套易於理解的完整描述,使得客戶端能夠準確地獲得它需要的數據,而且沒有任何冗餘,也讓 API 更容易地隨着時間推移而演進,還能用於構建強大的開發者工具。基於 node ⌘ Read more
帶你十天輕鬆搞定 Go 微服務系列(七)**
序言--我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:環境搭建:帶你十天輕鬆搞定 Go 微服務系列(一) 服務拆分:帶你十天輕鬆搞定 Go 微服務系列(二) 用戶服務:帶你十天輕鬆搞定 Go 微服務系列(三) 產品服務:帶你十天輕鬆搞定 Go 微服務系列(四) 訂單服務:帶你十天輕鬆搞定 Go 微服務系列(五) ⌘ Read more
讓 Go 的錯誤處理更加強大**
Go 所提供的默認的 errors 包有很多的不足。編寫多層架構應用程序並使用 API 公開功能的時候,相比於單純的 string 類型的值,更需要具有上下文信息的錯誤處理。意識到這個缺點後,我開始實現一個更強大,更優雅的 error 包。這是一個逐漸演化的過程,隨着時間推移,我需要在這個包中引入更多的功能。在此,我們會探討我們如何使用一個 CustomError 數據類型爲應用中帶來更多的價值, ⌘ Read more
帶你十天輕鬆搞定 Go 微服務系列(六)**
序言--我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:環境搭建:帶你十天輕鬆搞定 Go 微服務系列(一) 服務拆分:帶你十天輕鬆搞定 Go 微服務系列(二) 用戶服務:帶你十天輕鬆搞定 Go 微服務系列(三) 產品服務:帶你十天輕鬆搞定 Go 微服務系列(四) 訂單服務:帶你十天輕鬆搞定 Go 微服務系列(五) ⌘ Read more
Golang 語言微服務的服務發現組件 Consul 的系統架構介紹**
01 介紹在上篇文章「Golang 語言微服務的服務註冊與發現組件 Consul」中,我們已經介紹服務註冊與發現是什麼,Golang 語言微服務架構爲什麼需要使用服務註冊與發現組件,Golang 語言開發的服務註冊與發現組件 Consul 的主要特性和基本介紹。本文我們介紹 Consul 的系統架構,讀者朋友們閱讀完本文可以瞭解 Consul 的工作原理。02 Consul 術語在介紹 Consu ⌘ Read more