# 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=1279
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1379
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1179
Go-web 如何一步步整合 swagger-ui
我們先說存在的問題:1、註釋本地生成,會因爲 swagger 版本不一致出現問題,出現各種 git 衝突,需要採用打包編譯時去執行生成。2、違背了編程的方式。3、爲什麼 Java 的 swagger 那麼火,是因爲和 spring-boot 完美整合,那麼 Spring 解決的其實就是 ioc 的控制,所以 go 的 web 也不需要程序去控制,路由,輸入,輸出,所以我們需要這麼做。前期準備--- ⌘ Read more
Go 併發並不一定是最快的**
併發並不一定是最快的許多開發人員犯的一個誤解是認爲併發的處理方法應該總是比順序的處理方法更快,這是大錯特錯的。處理方法的整體性能取決於很多因素。例如程序結構的效率(併發性),可以並行處理的部分以及計算單元之間的競爭程度。在本節中,我們將學習一些 Go 併發的基礎知識,並通過一個具體的例子說明併發的處理方法並不是最快的。Go 調度線程是操作系統可以執行的最小處理單元。如果一個進程想要同時執行多個動作 ⌘ Read more
Go 語言基於 Go kit 開發 Web 項目**
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹我們在上一篇文章「Golang 微服務工具包 Go kit」介紹了 Go 語言工具包 Go kit,本文我們介紹怎麼基於 Go kit 開發 Web 項目。在閱讀上篇文章後,我們已經知道 Go ⌘ Read more
Uber Go 規範 -二-: Slice、Struct、Map**
Uber 是一家美國硅谷的科技公司,也是 Go 語言的早期 adopter。其開源了很多 golang 項目,諸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 將內部的 Go 風格規範 開源到 GitHub,經過一年的積累和更新,該規範已經初具規模,並受到廣大 Gopher 的關注,本文是對規範的整理 https://github.com/xxjwxcRead more
成爲一名 Gopher 的 7 個階段**
一天上班時,我們在工作聊天室裏討論 Go 編程語言。有一次,我對一個同事的幻燈片進行了評論,說了一些話。 「我認爲這就像是成爲 Go 程序員的七個階段中的第三階段。」很自然地,我的同事們想知道其餘的階段,所以我簡單地概述了一下 [1]。以下是成爲 Go 程序員的七個階段,並附有更多的背景資料;看看你是否能在這條路上看到自己。第一階段:你相信你可以讓 Go 做面向對象的編程------------ ⌘ Read more
分佈式鏈路追蹤 Jaeger 在 Golang 中的使用**
一個完整的微服務體系至少需要包括:CI / CD 也就是自動化部署 服務發現 統一的 PRC 協議 監控 追蹤 (Tracing) 要配置上面這些東西可謂說超級複雜, 所以我建議讀者 如果可以直接使用 istio它強大到包含了微服務開發需要考慮的所有東西, 上圖中的”Observe” 就包括了這篇文章所說的” 鏈路追蹤 (Tracing)”.但軟件行業沒有銀彈, 強大 ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之網絡編程**
前言--Hi,大家好呀,我是碼農,星期八,我們身處 21 世紀,我們的世界已經在不知不覺中,就像很多網一樣在互聯互通。-------------------------------------------------------互聯網是一個統稱,目前比較常用的有TCP,UDP協議。當然,還有很多其他的協議,但是本次主要講最常用的TCP和UDP協議。socker 編程---------我們所學的TC ⌘ Read more
golang 源碼分析:sony-gobreaker**
很久以前分析過一款斷路器 golang 源碼分析(39)hystrix-go,最近看了一款類似的斷路器 sony/gobreaker,https://github.com/sony/gobreaker 分析下它的源碼,感覺理解又一步加深了,它的源碼很簡單就一個 gobreaker.go,並且它攜帶了一個例子 example/httpbreaker.go,我們先從例子入手分析,它主要 ⌘ Read more
一個 golang 實現的全文檢索引擎,支持億級數據,毫秒級查詢**
一、開源項目簡介GoFound 是一個 golang 實現的全文檢索引擎 基於平衡二叉樹 + 正排索引、倒排索引實現 可支持億級數據,毫秒級查詢。使用簡單,使用 http 接口,任何系統都可以使用。二、開源協議使用 Apache-2.0 開源協議三、界面展示管理界面服務器監控:暗色模式:四、功能概述 支持 Windows、Linux、macOS、(amd64 和 arm64)和蘋果 M1 處理器 ⌘ Read more
Uber Go 規範 -一-: 編碼和命名**
Uber 是一家美國硅谷的科技公司,也是 Go 語言的早期 adopter。其開源了很多 golang 項目,諸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 將內部的 Go 風格規範 開源到 GitHub,經過一年的積累和更新,該規範已經初具規模,並受到廣大 Gopher 的關注,本文是對規範的整理。 https://github.com/xxjwxRead more
一文搞懂啥是信號量 Semaphore?**
信號量是併發編程中常見的同步機制,在標準庫的併發原語中使用頻繁,比如 Mutex、WaitGroup 等,這些併發原語的實現都有信號量的影子,所以我們很有必要學好弄清楚信號量的實現原理,做到 “知其然,更要知其所以然”,我們纔能有更多的“武器” 去應對實際面臨的業務場景問題。 今天我們就來搞定信號量,通過這篇文章你能掌握:信號量是什麼?都有什麼操作? Go 官方是如何實現信號量的? ⌘ Read more
Go: 屏障併發模式**
什麼是屏障併發模式?假設有這麼一種場景,一個微服務需要調其他兩個微服務,通過組合他們的響應結果來返回給客戶端。屏障併發模式在這裏就有用武之地了。屏障併發模式會使一個服務阻塞等待給客戶端響應結果,直到從其他一個或多個不同的 Goroutine(服務) 中獲取到返回內容。怎樣才能使服務具有阻塞性質?我們可以用鎖,但是在 Go 中更習慣使用通道。目標顧名思義,屏障模式就是讓程序阻塞直到準備就緒爲止。其目 ⌘ Read more
使用 Go 和 Linux Kernel 技術探究容器化原理**
容器的優勢-----傳統模式的部署,直接將多個應用運行在物理服務器上,如果其中一個應用佔用了大部分資源,可能會導致其他應用的性能下降。虛擬化部署時代,可以在單個物理服務器的 CPU 上運行多個虛擬機(VM),每個 VM 是一臺完整的計算機,在虛擬化硬件之上運行所有組件(包括了操作系統)。因此,可以讓不同的應用在 VM 之間安全地隔離運行,更好地利用物理服務器上的資源。容器與 VM 類似,具有自己的 ⌘ Read more
Go gRPC 之 TLS 認證 - 自定義方法認證**
【導讀】本文將介紹如何爲 gRPC 添加安全機制,包括 TLS 證書認證和 Token 認證。TLS 證書認證什麼是 TLSTLS(Transport Layer Security,安全傳輸層),TLS 是建立在傳輸層TCP 協議之上的協議,服務於應用層,它的前身是 SSL(Secure Socket Layer,安全套接字層),它實現了將應用層的報文進行加密後再交由 TCP 進行傳輸的功能。TL ⌘ Read more
用 Go 快速開發一個 RESTful API 服務**
何時使用單體 RESTful 服務-----------------對於很多初創公司來說,業務的早期我們更應該關注於業務價值的交付,而單體服務具有架構簡單,部署簡單,開發成本低等優點,可以幫助我們快速實現產品需求。我們在使用單體服務快速交付業務價值的同時,也需要爲業務的發展預留可能性,所以我們一般會在單體服務中清晰的拆分不同的業務模塊。商城單體 RESTful 服務---------------我 ⌘ Read more
Go 如何編寫簡單的內存鍵值數據庫**
圖片從 Postgres 到 Redis,再到 Prometheus,我們都使用並從事過各種數據庫的開發。我花了很多時間來閱讀其中一些數據庫的源代碼,對於那些像我一樣好奇的少數人來說,他們有興趣學習如何編寫一個數據庫。本書旨在記錄這一過程。GitHub-arriqaaq/flashdb:FlashDB is an embeddable, in-memory key/value database i ⌘ Read more
Go GUI 開發者調查結果**
大家好,我是程序員幽鬼。這是第一次 Go GUI 開發者調查結果。這是 Fyne[1] 和 Gio[2] 社區的開發者進行的 Go GUI 開發者調查結果。重點如下:高達 15% 的 Go 社區正在開發圖形應用程序(GUI) 32% 的受訪者選擇 Go 是因爲工具包而不是語言本身 Fyne 似乎比 GTK+ 和 Qt 加起來更受歡迎,而 Gio 顯然比 GTK+ 更受歡迎 哪些人 ⌘ Read more
Go 寫腳本**
Unix shell 就像魔法,通過正確的 shell 代碼可以管理文件、處理文本、計算數據,並將任何程序的輸出作爲其他程序的輸入。所謂一行正確的 shell 代碼可實現魔法般的功能。系統程序並不是 shell 本身很聰明。作爲一種編程語言,至少對於複雜任務來說,它顯然是笨拙的。但它優雅的設計使它成爲完美的腳本語言:短小、專注於操作文件、進程或文本,爲管理計算機系統服務。換句話說,寫系統程序方便。 ⌘ Read more
支持 300 - 常用功能的開源 GO 語言工具函數庫**
本期推薦的是一個 Go 語言工具函數庫——Lancet。lancet(柳葉刀)是一個全面、高效、可複用的 go 語言工具函數庫。lancet 受到了 java apache common 包和 lodash.js 的啓發。特性全面、高效、可複用 300 + 常用 go 工具函數,支持 string、slice、datetime、net、crypt... 只依賴 go 標準庫 所有 ⌘ Read more
Golang:“閉包(closure)” 到底包了什麼?**
本文講介紹以下幾個內容:引入用 GoLang 語言寫的幾個 case; 介紹什麼是閉包; 介紹什麼是閉包的延遲綁定; 從閉包的延遲綁定講到 GoLang 的 Go Routine 的延遲綁定問題; I. 幾個有趣的 Case開門見山,首先請各位看官們先看下面foo1()到foo7()一共 7 個函數,然後回答後面的問題。(一下子丟出 7 個函數,請見諒。不過,每個函數都非 ⌘ Read more
3 種方式!Go Error 處理最佳實踐**
錯誤處理一直以一是編程必需要面對的問題,錯誤處理如果做的好的話,代碼的穩定性會很好。不同的語言有不同的出現處理的方式。Go 語言也一樣,在本篇文章中,我們來討論一下 Go 語言的錯誤處理方式。一、錯誤與異常(一)Error--------錯誤是程序中可能出現的問題,比如連接數據庫失敗,連接網絡失敗等,在程序設計中,錯誤處理是業務的一部分。Go 內建一個 error 接口類型作爲 go 的錯誤標準處 ⌘ Read more
解密 Go 協程的棧內存管理**
應用程序的內存會分成堆區(Heap)和棧區(Stack)兩個部分,程序在運行期間可以主動從堆區申請內存空間,這些內存由內存分配器分配並由垃圾收集器負責回收。棧區的內存由編譯器自動進行分配和釋放,棧區中存儲着函數的參數以及局部變量,它們會隨着函數的創建而創建,函數的返回而銷燬。 網管碎碎念:堆和棧都是編程語言裏的虛擬概念,並不是說在物理內存上有堆和棧之分,兩者的主要區別是棧是每個線程或者協程獨立擁 ⌘ Read more
簡單易懂的 Go 泛型使用和實現原理介紹**
原文:A gentle introduction to generics in Go by Dominik Braun 萬俊峯 Kevin:我看了覺得文章非常簡單易懂,就徵求了作者同意,翻譯出來給大家分享一下。本文是對泛型的基本思想及其在 Go 中的實現的一個比較容易理解的介紹,同時也是對圍繞泛型的各種性能討論的簡單總結。首先,我們來看看泛型所解決的核心問題。問題--假設我們想實現一個簡單的 t ⌘ Read more
go-micro 集成 RabbitMQ 實戰和原理**
在 go-micro 中異步消息的收發是通過 Broker 這個組件來完成的,底層實現有 RabbitMQ、Kafka、Redis 等等很多種方式,這篇文章主要介紹 go-micro 使用 RabbitMQ 收發數據的方法和原理。Broker 的核心功能Broker 的核心功能是 Publish 和 Subscribe,也就是發佈和訂閱。它們的定義是:Publish(topic string, m ⌘ Read more
使用 go run 來管理工具依賴**
我是一隻可愛的土撥鼠,專注於分享 Go 職場、招聘和求職,解 Gopher 之憂!歡迎關注我。 歡迎大家加入 Go 招聘交流羣,來這裏找志同道合的小夥伴!跟土撥鼠們一起交流學習。當你在開發一個項目時,通常都會有一些咱們開發人員依賴的工具。開發、測試、構建或部署過程中運行的工具。例如,你可以將golang.org/x/text/cmd/gotext結合使用go:generate來生成需要翻 ⌘ Read more
Go 語言中拷貝文件的幾種常用的方式**
簡介本篇文章將介紹 Go 語言中,最最最常用的 3 種拷貝文件的方法,這三種方法各有利弊,我們只需要在應用中選擇最合適的即可,不必盲目追求性能。方法 1第一個方法將使用標準 Go 庫的 io.Copy()函數。以下是使用 io.Copy() 實現的拷貝文件代碼片段:func copy(src, dst string) (int64, error) {        sourceFileStat, ⌘ Read more
Golang 抽象語法樹 -AST- Step By Step
一、AST 基礎概念與入門必備---------------1.1 什麼是 AST(Abstract Syntax Tree)?根據維基百科的介紹:在計算機科學中,抽象語法樹 (AST),或者僅僅是語法樹,是用編程語言編寫的源代碼的抽象語法結構的樹狀表示。樹的每個節點都表示源代碼中出現的一個構造。大多數編譯器和解釋器都使用 AST 作爲源代碼的內部表示,AST 通常會省略語法樹中的分號、換行字符、 ⌘ Read more
給 go 項目打最小 docker 鏡像,足足降低 99-
【導讀】go 項目怎麼讓 docker 鏡像體積減小?本文做了詳細介紹。直接編譯得到運行文件 22M使用的項目源碼地址 (https://github.com/scoful/kingProject) 本地直接編譯打一個 linux 運行包set GOOS=linuxset GOARCH=amd64go build main.go 結果是 22M不編譯直接運行的鏡像 941MDockerfile ⌘ Read more
硬核,圖解 bufio 包系列之讀取原理**
大家好,我是漁夫子。今天我們通過圖解的方式來給大家分享下 bufio 包的實現機制。本系列計劃用三篇文章來寫:bufio 包中的讀取原理、bufio 包中的寫入原理以及使用 bufio 高效讀取的示例。今天跟大家分享第一篇讀取原理。01 Go 中普通的文件讀寫首先我們來看看在 Go 中對文件的普通讀取方式是怎麼樣的。下面是普通的讀取文件內容的示例代碼:package mainimport ( ⌘ Read more
Go 應用程序設計標準**
01 介紹衆所周知 Go 語言官方成員 Russ Cox 曾向 Go 社區迴應並沒有 Go 應用程序設計標準。但是,爲什麼本文還要使用這個標題呢?因爲團隊達成一個共識(標準),制定一些團隊成員都要遵循的規則,可以使我們的應用程序更容易維護。本文介紹一下我們應該怎麼組織我們的代碼,制定團隊的 Go 應用程序設計標準。需要注意的是,它不是核心 Go 開發團隊制定的官方標準。02 定義 domain 包 ⌘ Read more
Go 中 trace 包的使用**
Go 給我們提供了一個工具trace,可以在運行時啓用trace, 並獲得程序執行情況的詳細視圖。應該怎麼使用trace呢?一般有下面三種使用方式運行go test的時候,帶上-trace參數標記, go test -trace=trace.out 從pprof中獲取實時trace, import "net/http/pprof" 在代碼中編碼嵌入trace, 代碼中使用, 我 ⌘ Read more
=
如何在測試中發現 goroutine 泄漏**
前言\\-\\- 哈嘍,大家好,我是asong; 衆所周知,gorourtine的設計是Go語言併發實現的核心組成部分,易上手,但是也會遭遇各種疑難雜症,其中goroutine泄漏就是重症之一,其出現往往需要排查很久,有人說可以使用pprof來排查,雖然其可以達到目的,但是這些性能分析工具往往是在出現問題後藉助其輔助排查使用的,有沒有一款可以防患於未然的工具嗎?當然有,goleak他來了,其由 U ⌘ Read more
Go 併發和協程池 -2-
Goroutines 和 channel 結構體使 golang 成爲強大的併發語言。在第一部分中,我們探討了如何構建一個協程池來優化 golang 的併發性能,即限制資源利用率。但那只是用一個簡單的例子來演示我們如何去做。在本文,我們將構建一個健壯的解決方案,以便我們可以在任何應用程序中使用這個解決方案。在網上也有一些解決方案,使用了調度程序和複雜的結構。事實上,不需要那麼複雜,我們可以使用一個 ⌘ Read more
Go 操作 ElasticSearch 實戰**
【導讀】本文介紹了 go 操作 elasticsearch 的實踐。在這裏記錄一下 Golang 操作elastic的使用方式,本文使用的是第三方包github.com/olivere/elastic的v7版本。精確匹配單個字段-----------使用term查詢,package mainimport (    "context"    "fmt"    "github.com/olivere/ ⌘ Read more
Golang protobuf 使用教程**
【導讀】本文介紹了 go 語言 protobuf 的使用。一、安裝1.protoc protoc 是 protobuf 文件(.proto)的編譯器,可以藉助這個工具把 .proto 文件轉譯成各種編程語言對應的源碼,包含數據類型定義、調用接口等。通過查看 protoc 的源碼(參見 github 庫)可以知道,protoc 在設計上把 protobuf 和不同的語言解耦了,底層用 c++ 來實 ⌘ Read more
Go 項目配置文件的定義和讀取**
前言--我們在寫應用時,基本都會用到配置文件,從各種 shell 到 nginx 等,都有自己的配置文件。雖然這沒有太多難度,但是配置項一般相對比較繁雜,解析、校驗也會比較麻煩。本文就給大家講講我們是怎麼簡化配置文件的定義和解析的。場景--如果我們要寫一個 Restful API 的服務,配置項大概有如下內容:Host,偵聽的 IP,如果不填,默認用 0.0.0.0 Port,偵聽的端口,必 ⌘ Read more
go 語言 runtime-debug 包詳解**
【導讀】本文對 runtime/debug 包內的方法進行了詳細介紹。程序包調試了包含程序在運行時進行調試功能, 就針對 api 進行一一講解1. 強制進行垃圾回收 2. 設置垃圾回收的目標百分比 3. 設置被單個 go 協程調用棧可使用的內存最大值 4. 設置 go 程序可以使用的最大操作系統線程數 5. 設置程序請求運行是隻觸發 panic, 而不崩潰 6. 垃圾 ⌘ Read more
Gin 參數綁定和校驗精簡版**
說明--在 gin 框架中我們需要對請求提交過來的參數進行合法性校驗,那很多開發者在判斷參數是否合法校驗時會寫很多 if else 邏輯,如果參數非常多,那麼這樣寫起來非常不優雅,那麼優雅的方式是什麼呢?請看以下代碼註釋。代碼--entity.go// 接受驗證碼參數structtype VerifyCodeParams struct { Uid          int    json:"uid ⌘ Read more
Go 併發和協程池**
在現代編程語言中,併發已經成爲一種非常明確的需求。如今幾乎每種編程語言都有一些併發的方法。有些語言具有豐富的結構體,可以將負載分配到操作系統的多線程上執行,例如 Java,類似的還有 Ruby。Golang 具有非常強大的併發模型,稱爲 CSP(communicating sequential processes),它將一個問題分解成更小的順序進程,然後調度這些進程的幾個實例,稱爲 Gorou ⌘ Read more
深入剖析對 Go 的成功作出巨大貢獻的設計決策**
Go 是一種編程語言,2007 年底在谷歌創建,2009 年 11 月正式開源發佈。從那時起,它開始作爲一個公共項目運作,有成千上萬的個人和數十家公司參與貢獻。Go 已成爲構建雲基礎設施的流行語言:Linux 容器管理器 Docker 和容器部署系統 Kubernetes 是用 Go 編寫的核心雲技術。今天,Go 是每個主要雲提供商的關鍵基礎設施的基礎,並且是雲原生計算基金會託管的大多數項目的實現 ⌘ Read more
Go 處理大數組:使用 for range 還是 for 循環?**
我們知道,Go 的語法比較簡潔。它並不提供類似 C 支持的 while、do...while 等循環控制語法,而僅保留了一種語句,即 for 循環。for i := 0; i < n; i++ {    ... ...}但是,經典的三段式循環語句,需要獲取迭代對象的長度 n。鑑於此,爲了更方便 Go 開發者對複合數據類型進行迭代,例如 array、slice、channel、map,Go 提供了 ⌘ Read more
=
理解 Golang 中的 interface 和 interface{}**
【導讀】本文介紹了 Go 語言的接口。在面向對象編程中,可以這麼說:“接口定義了對象的行爲”, 那麼具體的實現行爲就取決於對象了。在 Go 中,接口是一組方法簽名 (聲明的是一組方法的集合)。當一個類型爲接口中的所有方法提供定義時,它被稱爲實現該接口。它與 oop 非常相似。接口指定類型應具有的方法,類型決定如何實現這些方法。讓我們來看看這個例子:Animal 類型是一個接口,我們將定義一個 An ⌘ Read more
如何在 Go 函數中獲取調用者的函數名、文件名、行號**
背景--我們在應用程序的代碼中添加業務日誌的時候,不論是什麼級別的日誌,除了我們主動傳給 Logger 讓它記錄的信息外,這行日誌是由哪個函數打印的、所在的位置也是非常重要的信息,不然排查問題的時候很有可能就猶如大海撈針。對於在記錄日誌時記錄調用 Logger 方法的調用者的函數名、行號這些信息。有的日誌庫支持,比如 Zapfunc main() {  logger, \\_ := zap.NewPr ⌘ Read more
=
Golang 中常用的代碼優化點**
寫代碼其實也有很多套路和經驗,這篇介紹幾個讓 golang 代碼更優雅的四個套路。這篇想和大家聊一聊 golang 的常用代碼寫法。在 golang 中,如果大家不斷在一線寫代碼,一定多多少少會有一些些代碼的套路和經驗。這些經驗是代表你對一些問題,或者一類問題的思考和解決。處理一個問題的方法有很多,如果頻繁遇到同樣的場景和問題,我們會自己思考有沒有更好的方式來解決,所以也就有了一些代碼套路了。 ⌘ Read more
Golang 從零到一開發實現 RPC 框架**
內容提要----RPC 框架是分佈式領域核心組件,也是微服務的基礎。今天嘗試從零擼一個 RPC 框架,剖析其核心原理及代碼實現,後續還會逐步迭代追加微服務治理等功能,將之前文章覆蓋的熔斷、限流、負載均衡、註冊發現等功能融合進來,打造一個五臟俱全的 RPC 框架。本文主要內容包括:RPC 實現原理 RPC 協議設計 RPC 服務端實現 RPC 客戶端實現 實現原理---- ⌘ Read more
一種優雅的 Golang 的庫插件註冊加載機制**
如何增加框架的擴展性,可能多少都會想到 “插件” 機制,本質上是可以把第三方開發庫快速融入項目的方法。本文介紹的就是這麼一種方法。 最近看到一個項目的插件加載機制,非常贊。當然這裏說的插件並不是指的 golang 原生的可以在 buildmode 中加載指定 so 文件的那種加載機制。而是軟件設計上的「插件」。如果你的軟件是一個框架,或者一個平臺性產品,想要提升擴展性,即可以讓第三方進行 ⌘ Read more
Golang 中的接口與多態**
【導讀】go 語言如何用接口實現多態?本文做了詳細介紹。1. 其他語言的接口除 Go 以外的其他語言,爲了實現一個接口,必須顯式從該接口繼承: interface IFoo {     void Bar(); }  // java class Foo implements IFoo {     // ... }  // C++ class Foo : public IFoo {     // .. ⌘ Read more
Go 常用包: 高性能 goroutine 池 ants
介紹-----ants是一個高性能的 goroutine 池,實現了對大規模 goroutine 的調度管理、goroutine 複用,允許使用者在開發併發程序的時候限制 goroutine 數量,複用資源,達到更高效執行任務的效果。github: https://github.com/panjf2000/ants1.1 實現功能列表自動調度海量的 goroutines,複用 goroutines ⌘ Read more
Go 語言指針保姆級教程!**
哈嘍,大家好,我是 Go 大叔,專注分享 Go 語言知識,一起進入 Go 的大門。普通指針 -------和 C 語言一樣, 允許用一個變量來存放其它變量的地址, 這種專門用於存儲其它變量地址的變量, 我們稱之爲指針變量 和 C 語言一樣, Go 語言中的指針無論是什麼類型佔用內存都一樣 (32 位 4 個字節, 64 位 8 個字節) package mainimport ( "f ⌘ Read more
如何封裝安全的 go
在業務代碼開發過程中,我們會有很大概率使用 go 語言的 goroutine 來開啓一個新的 goroutine 執行另外一段業務,或者開啓多個 goroutine 來並行執行多個業務邏輯。在業務代碼開發過程中,我們會有很大概率使用 go 語言的 goroutine 來開啓一個新的 goroutine 執行另外一段業務,或者開啓多個 goroutine 來並行執行多個業務邏輯。所以我爲 had ⌘ Read more
Go 後端分頁怎麼做?用 Gorm!**
一、前言----在使用 Go 語言進行後端開發時,個人比較喜歡的一個 orm 是 Gorm,也是 Go 後端開發中使用最多的 orm(star 最多)。而且它還是由國內大佬 jinzhu 開發的,看着格外順眼。和 python 的 SQLAlchemy 相比,gorm 沒有專門用於分頁的函數(應該大部分 orm 都沒有吧),由於本人是從 python 後端轉到 go 後端,少了一些語法糖有些不適應 ⌘ Read more
使用 Go 從零開發併發佈一個 Kubectl 插件**
作者:KaliArch(薛磊),某 Cloud MSP 服務商產品負責人,熟悉企業級高可用 / 高併發架構,包括混合雲架構、異地災,熟練企業 DevOPS 改造優化,熟悉 Shell/Python/Go 等開發語言,熟悉 Kubernetes、 Docker、 雲原生、微服務架構等前言--十年雲計算浪潮下,DevOps、容器、微服務等技術飛速發展,雲原生成爲潮流。企業雲化從 “ON Cloud ⌘ Read more
打造 Go 語言最快的排序算法**
前言--說到排序算法,很多同學會想起快速排序、堆排序、冒泡排序這些耳熟能詳的算法。瞭解得深一些的同學,也可能看過例如 Python 的 timsort 以及 C++ intro sort 之類的排序算法。但是我們也會有很多疑問,例如 Go 語言中使用的快速排序和我們書上學到的快速排序有什麼區別呢?如果我們自己寫一個快排,會比 Go 語言自帶的快嗎?排序算法方面業界最新的進展是什麼呢,有沒有一個算法 ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之切片補充**
前言--Hey,大家好呀,我是星期八,這次咱們繼續學習 Go 基礎之切片補充扒。make 疑雲-------我們知道,可以通過 make 創建切片。var names = make([]string,10,10)這句話表示動態創建了一個切片,切片中的元素數量爲 10 個,切片的容量也爲 10 個。 你有疑惑嗎???切片的數量和容量是什麼???他倆什麼關係???切片本質----其實切片,終究是一個 ⌘ Read more
=
9 張圖輕鬆喫透 Go 內存管理單元**
本文基於Go源碼版本1.16、64位Linux平臺、1Page=8KB、本文的內存特指虛擬內存想深入瞭解 Go 語言的內存管理實現,必然繞不開「Go 內存管理單元mspan」,Go 堆內存、棧內存的分配過程都依賴了「內存管理單元mspan」。今天我們就通過幾張圖,層層深入並解開「Go 內存管理單元mspan」的神祕面紗。本文包含的具體概念如下:page的概念 mspan的概念 obje ⌘ Read more
Go 通過反射方式對 map 進行操作**
通過反射方式對 map 進行操作,實際上未必會有多麼複雜,它包含了如下的一系列 reflect 中的方法以及一個迭代對象 MapIter:reflect.Type Key() Type Value() Type reflect.Value MapKeys() []Value MapRange() MapIter MapIndex(key Value) Value ⌘ Read more
Go 語言從 0 到 1 實現最簡單的數據庫!**
後臺開發對於數據庫操作是必不可少的事情,瞭解數據庫原理對於平常的工作的內功積累還是很有幫助的,這裏實現一個最簡單的數據庫加深自己對數據庫的理解。一、go 實現數據庫目的瞭解數據是如何在內存和磁盤存儲的 數據是怎麼移動到磁盤 主鍵是如何保持唯一性 索引是如何形成 如何進行全表遍歷 熟悉 Go 語言對內存以及文件操作 二、數據庫選擇 SQLite選擇 SQLite ⌘ Read more
使用 gin 封裝一個 web 腳手架之控制器和路由**
【導讀】本文介紹了用 gin 封裝 web 腳手架的實踐。創建一個 go 項目,名稱爲 myGingo.mod 文件爲module myGingo 1.16安裝 gingo get -u github.com/gin-gonic/gin創建一個 main.go 文件package mainimport (    "github.com/gin-gonic/gin")func main() { ⌘ Read more
爲什麼你不應該接受有 race 的 Go 代碼**
在任何語言的併發編程場景中,都有 race 問題,現代語言爲了解決 race 問題有兩種思路,一種是像 rust 那樣的通過所有權 + Sync/Send 限制用戶儘量無法寫出帶 race 的代碼;一種是像 Go 這樣,通過 race detector 在測試期間檢查數據競爭問題。Go 的 race detector 設計決定了其無法在線上環境開啓,而很多公司的項目上線前其實是沒有 race te ⌘ Read more
Go 的高效開發套路**
作者:EdwardQ來源:SegmentFault  思否社區背景 ---------當前在公司進行 Go 服務端研發工作時,發現缺少 Go 開發的最佳實踐,而導致以下現象-------------------------------------------用 Go 開發時會比較迷茫,不知如何下手,怎麼開展工作比較高效。 重複造輪子比較嚴重。 項目的代碼質量參差不齊,導致交付的產品質 ⌘ Read more
Rust Async 4- 理解 Future
這次我們利用 tokio 這個庫來嘗試理解 Future。        Tokio 運行時就是管理異步任務並安排他們在 CPU 上執行的組件。如上圖,一個程序可能生成多個任務,每個任務可能包含一個或多個 Future。        下面我們寫一個自定義的 Future,來進行深入的理解。程序結構大致如下:        程序代碼如下:這裏:·      第 2 行:引入了一個特 ⌘ Read more
通過 SingleFlight 模式學習 Go 併發編程**
最近接觸到微服務框架go-zero,翻看了整個框架代碼,發現結構清晰、代碼簡潔,所以決定閱讀源碼學習下,本次閱讀的源碼位於core/syncx/singleflight.go。在go-zero中SingleFlight的作用是:將併發請求合併成一個請求,以減少對下層服務的壓力。應用場景----查詢緩存時,合併請求,提升服務性能。假設有一個 IP 查詢的服務,每次用戶請求先在緩存中查詢一個 IP 的 ⌘ Read more
淺談 Go 語言高性能哈希表的設計與實現**
目錄MatrixOne 數據庫是什麼? 哈希表數據結構基礎哈希表基本設計與對性能的影響    3.1 鏈地址法    3.2 開放尋址法    3.3 碰撞處理    3.4 Max load factor    3.5 Growth factor    3.6 空閒桶探測方法一些常見的哈希表實現    4.1C++     4.2std::unorderedmap/boost::unorder ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之切片**
前言--Hey,大家好呀,我是星期八,這次咱們繼續學習 Go 基礎之切片扒。爲什麼需要切片-------在原來的時候,我們學過數組,我們知道數組是可以存儲很多東西的。代碼package mainimport "fmt"func main() { var studentlist = [4]string{"張三", "李四", "王五,", "小劉"} fmt.Println(studen ⌘ Read more
=
OBS 連接器 go-obs-websocket
推薦理由互聯網的興起帶動了直播行業的火熱,除了少數直播網站有自己的推流工具之外,OBS 是主流的推流工具,廣泛應用在直轉播技術之上。簡介go-obs-websocket 是一個與 OBS 進行 websocket 通信的連接庫,具備調用大部分 OBS 功能的接口,在互動直播和智能轉播技術上廣泛應用。快速開始安裝go get github.com/christopher-dG/go-obs-webs ⌘ Read more
golang tcp socket 那些事兒**
前言--前幾年剛學 golang 時聽過這麼個論調:golang 要制霸雲計算行業。具體是不是這樣筆者就不知道了。不過這也體現出 golang 在網絡編程這一塊的實力可見一斑。今天我們就探討下網絡編程中的 socket 編程的那些事兒。socket 入門概念socket,中文是套接字的意思。套接字又是幹什麼的?是負責進程間通信的。進程間通信有很多種,socket 在進程間通信中起到了什麼樣的作用呢 ⌘ Read more
Go netpoll 大解析**
圖片拍攝於 2022 年 4 月 3 日 杭州 開篇之前簡單看過一點 go 原生 netpoll,沒注意太多細節。最近從頭到尾看了一遍,特寫篇文章記錄下。文章很長,請耐心看完,一定有所收穫。 內核空間和用戶空間在 linux 中,經常能看到兩個詞語: User space(用戶空間) 和 Kernel space (內核空間)。簡單地說, Kernel space 是 linux 內核運行的空 ⌘ Read more
Golang 中的異步任務隊列**
【導讀】本文介紹了 Go 移步任務隊列的實現。在一些常見的場景中,如果遇到了某些請求特別耗時間,爲了不影響其它用戶的請求以及節約服務器資源,我們通常會考慮使用異步任務隊列去解決,這樣可以快速地處理請求、只返回給用戶任務創建結果,等待任務完成之後,我們再告知用戶任務的完成情況。對於 Golang,我們可以通過 Worker pool 異步處理任務,在大多數情況下,如果不在意數據丟失以及服務器性能足夠 ⌘ Read more
Go 自定義 Json 序列化規則**
開發過程中,我們經常會使用 JSON 作爲數據傳輸格式。而這離不開對 JSON 數據的編解碼工作,在 Go 中,encoding/json 包提供了這些能力。我們可以使用 encoding/json 包的 Encoder.Encode() 和 Marshal() 實現 Json 序列化,使用 Decoder.Decode() 和 Unmarshal() 實現 Json 反序列化。示例如下packa ⌘ Read more
基於 CRON 庫擴展的分佈式 Crontab 的實現**
0x00 前言-------cron[1] 是一個用於管理定時任務的庫(單機),基於 Golang 實現 Linux 中 crontab 的功能0x01 使用-------Linux 的 crontabcrontab 基本格式: 文件格式說明 ┌──分鐘(0 - 59) │ ┌──小時(0 - 23) │ │ ┌──日(1 - 31) │ │ │ ┌─月(1 - 12) │ │ │ │ ┌─星期( ⌘ Read more
Golang http server 代碼原理**
撥雲見霧----Go 中要實現一個簡單的 Web server 非常的簡單:package mainimport (    "io"    "log"    "net/http")func main() {    http.HandleFunc("/", HelloServer)    log.Fatal(http.ListenAndServe(":8080", nil))}func HelloS ⌘ Read more
Dubbo-go-Mesh 開啓新一代 Go 微服務形態**
一  什麼是 Proxyless Service-Mesh (無代理服務網格) ?---------------------------------------------1  Service Mesh 簡析Istio 是當今最流行的開源服務網格。它由控制平面和數據平面構成,其架構如下(圖片摘自 Istio 官網)。位於圖中下半部分的控制平面負責配置、服務信息、證書等資源的下發。位於上半部分的數據 ⌘ Read more
Go 泛型實戰 - 如何在結構體中使用泛型**
01 目標假設我們要實現一個 blog 系統,我們有兩個結構體:分類和文章。爲了提高系統的性能,我們需要實現一個緩存系統,該緩存可以用於緩存該系統中的分類和文章。分類和文章的結構體類型定義如下:type Category struct { ID int32 Name string Slug string}type Post struct { ID int32 Cate ⌘ Read more
關於用 Go 實現堆和堆操作,可能是最通俗易懂的講解了**
堆是一種樹形數據結構,分爲大頂堆和小頂堆,顧名思義,大頂堆就是堆頂(第一個元素)始終存放的是這組元素中的最大元素,小頂堆就是堆頂元素是最小元素。如果需要從一組對象中查找最大值或最小值,使用堆能夠高效率的完成需求。排序算法中的堆排序正是利用了堆這一數據完成的排序,堆在實際應用中主要被用於實現優先隊列(priority queue)下面我們以小頂堆爲例學習一下堆的結構和常規操作。堆的特性----小頂堆 ⌘ Read more
新提案:創建 Go 簡單類型的指針表達式**
大家好,我是煎魚。在 Go 語言中,我們經常要聲明各種變量,再進行賦值,才能開始寫程序。常見的會是使用 new 或 make,甚至會有技術文章《Go 面試題:new 和 make 是什麼,差異在哪?》探討什麼 new 和 make 的區別。也有特例,是直接使用 &S{} 來作爲構建指向結構體的指針的方法。這奇怪點是,只有結構體可以用,分配方式是半隱藏的。背景--這可能叫做創作這門語言的 Go 語言 ⌘ Read more
c2go: 通過 sqlite3 遷移實踐重新認識 C 語言**
自從 Go+ 決定不沿用 Go 的 cgo 能力,而是採用全新的方式來支持 C 語言(詳細參見《Go+ 下個里程碑:超越 cgo,無縫對接 C 語言》一文的內容)後,我們花了 10 天時間把 C 語言的語法支持實現了個七七八八(詳細參見《Go+ 探究:如何 10 天實現工業級的 C 編譯器》一文的內容)。按照原計劃,我們第二步開始遷移 C 標準庫,然後第三步遷移一個知名的開源庫,大概率我們會選 s ⌘ Read more
每個 gopher 都需要了解的 Go AST
最近業務遷移,大約 100+ 個接口需要從舊的服務,遷到公司框架。遇到幾個痛點:結構體 dto 做 diff, 對比結果 自定義的結構體與 protobuf 生成的互相轉換,基於 json tag 這類工作要麼手寫 (編譯期), 要麼 reflect 反射實現 (運行時)。其中 #1 考濾到性能問題,手寫最優,但是結構體太大,同時 100+ 個接口遷移,工作量可以想象google 開源 ⌘ Read more
Go 彙編語法和 MatrixOne 使用介紹**
1MatrixOne 數據庫是什麼?MatrixOne 是一個新一代超融合異構數據庫,致力於打造單一架構處理 TP、AP、流計算等多種負載的極簡大數據引擎。MatrixOne 由 Go 語言所開發,並已於 2021 年 10 月開源,目前已經 release 到 0.3 版本。在 MatrixOne 已發佈的性能報告中,與業界領先的 OLAP 數據庫 Clickhouse 相比也不落下風。作爲一款 ⌘ Read more
一篇文章帶你瞭解 Go 語言基礎之字節類型**
前言--Hey,大家好呀,我是星期八,這次咱們繼續學習 Go 基礎之字節類型吧。上文之字符串回顧--------在上述文章中,我們學過了字符串類型。在 Go 語言中,字符串類型是基本類型,在棧中存儲,其結構如下。可以看到,在 Go 中,字符串其實就是指向了一個連續的內存地址,並且記錄了長度,讀取是一次性讀取出來的。那麼,如上圖所示,內存裏面存的一個個字母叫啥呢???byte 和 rune 類型-- ⌘ Read more
好物分享:快速找到 Goroutine 泄露的地方**
大家好,我是煎魚。Go 語言能夠廣受大家喜歡,其中一個原因就是他的協程做的非常非常簡單,初學的入門者都可以使用。平時只需 go 關鍵字一下,成千上萬個 goroutines 就出現了:for ...  go func(){}起協程就跟下餃子的。這時就個大問題,因爲協程用起來簡單,出問題出起來也很快。也就是常常會出現 goroutine 泄露,查起來很費勁。goleak------今天給大家推薦一個 ⌘ Read more
Golang 的異常處理**
Golang 的異常處理 ---------------Golang的優點有很多,以前的文章中也有提到過,但也有很多槽點爲 Gopher 所詬病,尤其是 錯誤處理。在說錯誤和異常之前,先要說兩個概念:錯誤處理:錯誤是業務中的一部分,是可以預見的。異常處理:非業務的一部分,不可預見的。錯誤處理首先看一下示例代碼:file, err := os.Open("/usr/local/test.txt") ⌘ Read more
=
「GoCN 酷 Go 推薦」JSON 數據獲取器 JID
01推薦理由  JSON 格式數據適用範圍非常廣泛,一個內容豐富的 json 數據可能很大,使用 JID 可以讓你非常舒服的獲取到想要到數據。02簡介JID 是一個過濾 JSON 格式數據 cli 工具,提供數據格式提醒,顏色區分顯示功能。03快速開始 安裝go install github.com/simeji/jid/cmd/jid@latest04獲取數據// 使用 \\| 輸入字符串數據 ec ⌘ Read more
進城內優雅管理多個服務**
前言--在 go-zero 社區裏,經常會有同學問,把 API gateway 和 RPC service 放在同一個進程內可不可以?怎麼弄?有時也會有同學把對外服務和消費隊列放在一個進程內。咱們姑且不說此種用法合理與否,因爲各個公司的業務場景和開發模式的差異,我們就只來看看此類問題怎麼解比較優雅。問題舉例----我們用兩個 HTTP 服務來舉例,我們有這樣兩個服務,需要啓動在一個進程內的兩個不同 ⌘ Read more
Go 語言併發編程保姆級教程!**
哈嘍,大家好,我是 Go 大叔,專注分享 Go 語言知識,一起進入 Go 的大門。 大叔和身邊一羣大牛都無限看好 Go 語言,現在開始搞 Go 語言,過兩年大概就是第一批喫螃蟹的人。併發編程基本概念--------學習併發編程之前我們需要腦補幾個基礎知識和思考一個問題 什麼是串行? 什麼是並行? 什麼是併發? 什麼是程序? 什麼是進程? 什麼是線程? 什 ⌘ Read more
Go 語言 SQL 解析之 goyacc 實戰**
【導讀】本文介紹了語法解析基本概念,結合 goyacc 實戰做了詳細介紹。一、Lex & Yacc 簡介---------------Lex & Yacc 是用來生成詞法分析器和語法分析器的工具,與 GNU 用戶所熟知 Flex&Bison 所對應(Flex 是由 Vern Paxon 實現的一個 Lex,Bison 則是 GNU 版本的 YACC)。除了編譯器領域,Lex & Yacc 對於 D ⌘ Read more
gRPC 客戶端長連接機制實現及 keepalive 分析**
0x00 前言-------HTTP2 是一個全雙工的流式協議, 服務端也可以主動 ping 客戶端, 且服務端還會有一些檢測連接可用性和控制客戶端 ping 包頻率的配置。gRPC 就是採用 HTTP2 來作爲其基礎通信模式的,所以默認的 gRPC 客戶端都是長連接。有這麼一種場景,需要客戶端和服務端保持持久的長連接,即無論服務端、客戶端異常斷開或重啓,長連接都要具備重試保活(當然前提是兩方重啓 ⌘ Read more
在 grom 中使用反射實現動態建表**
【導讀】在 gorm 中使用反射機制實現依據運行時獲得的數據來創建數據表。在我的畢設 “網絡安全日誌採集儲存系統” 中,我遇到了一個需求——從外部文件中加載模板,並以此對從多臺服務器上採集到的 nginx 訪問日誌 (access log) 進行正則提取,獲得需要的字段並最終儲存到 mysql 中。這裏存在着一個問題,由於需要提取的字段以及字段的命名都來源於外部文件,在程序編譯時是沒辦法知道的,所 ⌘ Read more
深入 Go 代碼覆蓋率使用、場景與原理**
一般我們會使用代碼覆蓋率來判斷代碼書寫的質量,識別無效代碼。識別靜態靜態的代碼對於靜態的代碼,要識別代碼沒有被使用,可以使用 golangci-lint 工具golangci-lint run --disable-all --enable unused對於通過單元測試 測試函數代碼的覆蓋率,在 go 生態中,go1.2 提供了 cover 工具。cover 基本用法------------首先 ⌘ Read more
Go 實現 RabbitMQ 延遲任務詳解**
【導讀】 本文介紹了 Go 語言配合 RabbitMQ 實現延遲任務的實現。延遲任務在業務中是一個很常見的需求,比如:訂單下單 15 分鐘之後,用戶沒有支付,則自動取消訂單 用戶做了某些操作,5 分鐘之後發短信提醒用戶 諸如此類的場景比比皆是,一種最常見的實現方式,就是開啓一個定時任務,然後一直輪詢數據庫,這種實現方式在數據量小的時候還好,但是數據量一旦過大,這輪詢數據庫就會給數據庫造 ⌘ Read more
「GoCN 酷 Go 推薦」​QQ 機器人 go-cqhttp
什麼是 go-cqhttp?✦QQ 機器人,可以做的事兒太多了,比如一個 UP 主需要羣發多個 QQ 羣,以便通知粉絲們開播;再比如可以檢測羣內或發給自己的消息,而通過代碼直接回復做的簡單回覆。比如檢測羣內有加入或退出羣時的消息而發送友好問候與告別白等。裏面的功能還有很多,比如批量獲取羣成員,嘿嘿,具體能做什麼,就自己發揮自己的想象力吧~請不要用於商業或打擾他人的用途噢~------------- ⌘ Read more
Go 發起 HTTP2-0 請求流程分析 -後篇-——標頭壓縮**
這是 HTTP2.0 系列的最後一篇,筆者推薦閱讀順序如下:Go 中的 HTTP 請求之——HTTP1.1 請求流程分析 Go 發起 HTTP2.0 請求流程分析 (前篇) Go 發起 HTTP2.0 請求流程分析 (中篇)——數據幀 & 流控制 回顧在前篇(http2ClientConn).roundTrip方法中提到了寫入請求 header,而在寫入請求 header 之前需 ⌘ Read more
Go 語言操作 NSQ 消息隊列**
【導讀】本文介紹了 NSQ 消息隊列和 go 語言 NSQ 交互。網上看了好多,都是抄個官網 README,很多重要的東西不說清楚。只好自己研究了一下。NSQ 的全家桶介紹----------nsqd:守護進程,客戶端通信。默認端口 4150(TCP) 4151(HTTP) nsqlookupd:相當於一個路由器。客戶端可以經由它發現生產者、nsqd 廣播的話題。一個 nsqlookupd ⌘ Read more
Go 發起 HTTP2-0 請求流程分析 -中篇-——數據幀 - 流控制**
閱讀建議 這是 HTTP2.0 系列的第二篇,所以筆者推薦閱讀順序如下:Go 中的 HTTP 請求之——HTTP1.1 請求流程分析 Go 發起 HTTP2.0 請求流程分析 (前篇) 本篇主要分爲三個部分:數據幀,流控制器以及通過分析源碼逐步瞭解流控制。本有意將這三個部分拆成三篇文章,但它們之間又有聯繫,所以最後依舊決定放在一篇文章裏面。由於內容較多,筆者認爲分三次分別閱讀三個部分 ⌘ Read more
Go 發起 HTTP2-0 請求流程分析 -前篇-**
前言 繼 Go 中的 HTTP 請求之——HTTP1.1 請求流程分析之後,中間斷斷續續,歷時近一月,終於纔敢開始碼字寫下本文。閱讀建議----HTTP2.0 在建立 TCP 連接和安全的 TLS 傳輸通道與 HTTP1.1 的流程基本一致。所以筆者建議沒有看過 Go 中的 HTTP 請求之——HTTP1.1 請求流程分析這篇文章的先去補一下課,本文會基於前一篇文章僅介紹和 HTTP2.0 相關 ⌘ Read more
分析 golang 程序內存使用情況**
本篇文章簡單介紹一下如何分析 golang 程序的內存使用情況。包含以下幾種方法的介紹:執行前添加系統環境變量GODEBUG='gctrace=1'來跟蹤打印垃圾回收器信息 在代碼中使用 runtime.ReadMemStats 來獲取程序當前內存的使用情況 使用 pprof 工具 一、一個簡單的 demo 代碼---------------package mainimport ⌘ Read more
=
Go 中的泛型:激動人心的突破**
作者 \\| Marko Milojevic譯者 \\| 王強策劃 \\| 劉燕一個特性改變一切。在我們選擇的編程語言中,我們多長時間會經歷一次根本性的變化?有些語言會變化得更頻繁一些,但還有些語言會比溫布爾登更保守。Go 語言就屬於後者。有時對我來說它實在太古板了。“Go 不是這麼寫的!” 是我夢到最多的一句話。Go 的多數新版本都只是對已有方向循序漸進的改善。一開始,我並不覺得自己喜歡這樣的路徑。沒什麼新 ⌘ Read more
【Go 官方教程】何時使用泛型**
介紹這是作者在 Google Open Source Live 和 GopherCon 2021 上演講的博客版本: https://youtu.be/nr8EpUO9jhw;https://youtu.be/Pae9EeCdy8Go 1.18 版本增加了一個主要的新語言特性:支持泛型編程。在本文中,不會描述什麼是泛型,也不會描述如何使用它們。本文將關注在 Go 編程中何時使用泛型,什麼時候不適合 ⌘ Read more
Golang 字符的 Unicode 與 UTF-8
【導讀】遇到編碼問題怎麼辦?瞭解一下 unicode 和 utf-8 編碼臨危不亂!大多數的我們,真正認識到有字符編碼這回事,一般都是因爲遇到了亂碼,因爲我國常用的編碼是 GBK 以及 GB2312:用兩個 Byte 來表示所有的漢字,這樣,我們一共可以表示 2^16 = 65536 個字符,一旦我們的 GBK 以及 GB2312 編碼遇到了其他編碼,比如日本,韓國的編碼,就會變成亂碼,當然,這時 ⌘ Read more=
聊聊 go 中的逃逸分析**
從一個例子開始----------下面是一段 c 代碼,函數 getStr 生成了 a-z 的串,我們分別在函數內部和 main 中對字串進行了輸出。//例1.1include stdio.h//返回字串char getStr(){    //char數組 函數棧上分配內存    char buf[27];    int i;    //產生a-z的串    for (i=0; i ⌘ Read more=
Golang 請求限速、排隊實現**
在調用第三方 API 的時候, 基本都有訪問限速的限制條件. 第三方的 API 有多個的時候, 就不太好控制訪問速度, 常常會導致 HTTP 429(Too Many Requests) 然後就會有一段時間的禁止訪問.爲了應對這種限速的情況, 通過一個簡單的請求隊列來控制訪問的速度, 之後基本沒遇到過 HTTP 429 了.實現思路首先, 每個請求包裝成一個 RequestParam 的 stru ⌘ Read more