# 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=1479
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1579
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1379
如何像 gitlab-runner 那樣將 Go 應用安裝爲系統服務**
在《讓 reviewdog 支持 gitlab-push-commit,守住代碼質量下限》1] 一文中,gitlab-runner[2 通過自身提供的 install 命令將自己安裝爲了一個系統服務 (如下面步驟): Create a GitLab CI usersudo useradd --comment 'GitLab Runner' --create-home gitlab-runner - ⌘ Read more
如何在 Go 中轉換數據類型**
介紹--在 Go 中,數據類型用於對一種特定類型的數據進行分類,確定可以分配給該類型的值以及可以對其執行的操作。在編程時,有時你需要在類型之間轉換值以便以不同的方式操作值。例如,你可能需要將數值與字符串連接起來,或者在初始化爲整數值的數字中表示小數位。用戶生成的數據通常會自動分配爲字符串數據類型,即使它由數字組成;爲了在此輸入中執行數學運算,你必須將字符串轉換爲數字數據類型。由於 Go 是一種靜態 ⌘ Read more
Go 一個兼具單機和集羣模式的輕量級限流器:throttle**
大家好,我是漁夫子。本號新推出「go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。 今天給大家推薦的工具是一個輕量級的限流器,star:1.2k。該工具實現了對資源的訪問速率限制,資源可以是特定的 URL、用戶或者任何自定義的形式。比如針對 HTTP API 接口。該包基於通用信源速率算法(generic cell rate algorithm)實現的。其底層存儲是內 ⌘ Read more
Go 新漏洞管理工具: govulncheck
我們很高興地宣佈 Go 對漏洞管理的最新支持,這是我們爲幫助 Go 開發者瞭解可能影響他們的已知漏洞而邁出的第一步。 這篇文章概述了這個項目的當前狀況和後續計劃。概覽------Go 提供的工具可以分析你的代碼庫並展示出已知的漏洞,該工具由 Go 安全團隊設計維護的 Go 漏洞數據庫提供支持。Go 只展示代碼調用函數中的漏洞,從而減少結果中的噪音。Go 漏洞數據庫------------Go 漏 ⌘ Read more
「Go 工具箱」推薦一個實現進度條功能的工具:uiprogress**
大家好,我是漁夫子。本號新推出「go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。今天給大家推薦的是在終端(terminal)下能夠顯示進度條的工具:uiprogress。先看下使用該包的效果圖:相信大家在 linux 或 mac 終端上都下載過東西,然後會出現下載的進度條。今天我們就給大家分析下實現原理並演示其效果。安裝$ go get -v github.com/g ⌘ Read more
Go 語言漏洞管理機制**
近年來針對軟件供應鏈的安全問題越來越突出,從之前的語言模塊投毒的,最近 PyPI遠程執行漏洞,還有今年年初的 Java 基礎日誌庫 Log4j 安全漏洞都充分展現了這個問題。爲了應付這個問題,Golang 新推出了漏洞管理支持,用來幫助 Golang 開發人員瞭解已知漏洞和解決供應鏈安全威脅。本文我們就來介紹一下 Golang 漏洞管理機制。概述Go 最新推出了漏洞管理工具來分析代碼庫和發現依賴庫 ⌘ Read more
一個線程安全的泛型支持 map 庫**
orcaman/concurrent-map[1] 是一個非常高效的線程安全的 map 庫,正如它的文檔中所說的那樣,標準庫sync.Map更適合append-only的場景,或者說少寫大量的讀的場景,如果針對多讀多寫的場景,concurrent-map可能會更有優勢。它是通過分片的方式,將鎖的粒度減少,從而提高性能。今年初的時候,這個庫做了改造,開始支持泛型 [2],但是不幸的是,它只支持 Va ⌘ Read more
Go 語言實現敏感詞檢測(前綴樹)**
一、前言\\-\\-\\-\\- 大家都知道遊戲文字、文章等一些風控場景都實現了敏感詞檢測,一些敏感詞會被屏蔽掉或者文章無法發佈。今天我就分享用 Go 實現敏感詞前綴樹來達到文本的敏感詞檢測,讓我們一探究竟!二、敏感詞檢測-------實現敏感詞檢測都很多種方法,例如暴力、正則、前綴樹等。例如一個遊戲的文字交流的場景,敏感詞會被和諧成 ,該如何實現呢?首先我們先準備一些敏感詞如下:sensitiveWords ⌘ Read more
「Go 工具箱」一個基於雙向鏈表實現的 LRU 緩存工具**
大家好,我是漁夫子。本號新推出「go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。今天給大家推薦的工具是一個實現了固定緩存大小、線程安全的緩存組件,該緩存實現了最近最少使用的策略:golang-lru。實現原理分析:該包是基於內置包 list.List 實現的,list.List 的底層是一個雙向鏈接。並提供了一個列表的大小。當對該列表中的某個元素進行訪問或添加操作時, ⌘ Read more
從頭開始在 Go 中設計一個無密碼的登錄系統**
無密碼登錄是一種誤導性的說法,因爲在任何認證步驟中都會以這樣或那樣的方式涉及密碼。即使是在生物識別系統中,你的生物識別技術也充當了密碼。無密碼的概念是圍繞着爲用戶創建臨時密碼而展開的。以達到減少攻擊面的目的。請放心,如果密碼每次都改變,那麼攻擊者將不得不獲得用戶的郵箱賬號或手機號來破解系統。本文是系列博客的一部分,我們將從頭開始構建無密碼認證系統的後端和前端。這裏使用的代碼不應該被用作任何項目的種 ⌘ Read more
Golang 1-19 原子操作再度升級**
8 月 2 號,Go 1.19 終於發佈,這次的更新包含了對於泛型帶來的諸多問題修復,提升了泛型性能(據官方描述性能優化了 20%),以及內存模型與 C, C++, Java, Rust 的對齊,還有我們今天的主角:sync/atomic 的新類型。感興趣的同學可以看下官方的 release blog[1],release note[2] 以及 下載安裝 [3],體驗一下新版本帶來的特性。今天我們 ⌘ Read more
Go 中簡單的內存節省技巧**
除非您正在對服務進行原型設計,否則您可能會關心應用程序的內存使用情況。佔用更小的內存,會使基礎設施成本降低,擴展變得更容易。儘管 Go 以不消耗大量內存而聞名,但仍有一些方法可以進一步減少消耗。其中一些需要大量重構,但很多都很容易做到。預先分配切片要理解這種優化,我們必須瞭解切片在 Go 中是如何工作的,爲此我們必須首先了解數組。go.dev 上有一篇非常好的關於這個主題的文章。數組是具有連續內存 ⌘ Read more
DNS 做服務發現,是坑嗎 ?**
背景分享遇到過這麼一個問題,有童鞋的 Go 程序用 DNS 解析做服務發現(內網用的 CoreDNS 做的域名解析服務器)。比如,內網有個服務域名,對應 7 個後端節點。爲了做服務發現,故障的剔除等服務,在 Client 端對一個給定的域名調用 Go 標準庫的  Resolver.LookupHost  方法來解析 ip 列表。如果解析得到的 ip 列表有變化,那麼在 Client 內對相應的對後 ⌘ Read more
基於 Go 語言開發的監控系統**
01 介紹小米開源的監控系統 open-falcon 和滴滴開源的日誌採集工具 falcon-log-agent 作爲一組黃金搭檔,被互聯網公司廣泛使用。本文介紹怎麼使用這組黃金搭檔監控業務系統的日誌。02 open-falconopen-falcon 使用 Golang 和 Python 開發,其中 Python 主要開發的是 Dashboard。限於篇幅,本文不準備介紹 open-falcon ⌘ Read more
微服務配置中心, 這個方案 Go 裏用起來不輸 SpringClou
微服務架構設計模式裏有一條講到,要設計可配置的服務。把服務從單體架構細分成微服務後,所有配置屬性都集中存儲在一個位置,更易於管理。這個集中存儲管理配置的地方,就是配置中心。使用配置中心還有一個好處就是,往往都支持應用配置的熱更新,這樣就不需要像修改本地配置那樣進行發版部署了。但是這麼好的事兒就沒有缺點了嗎?當然有,除非有基礎設施支持,否則它需要額外的人力進行設計和運維。不過好在有各種開源框架比如 ⌘ Read more
使用 Go 語言完成 HTTP 文件上傳與下載**
爭做團隊核心程序員,關注「幽鬼」近我使用 Go 語言完成了一個正式的 Web 應用,有一些方面的問題在使用 Go 開發 Web 應用過程中比較重要。過去,我將 Web 開發作爲一項職業並且把使用不同的語言和範式開發 Web 應用作爲一項愛好,因此對於 Web 開發領域有一些心得體會。總的來說,我喜歡使用 Go 語言進行 Web 開發,儘管開始一段時間需要去適應它。Go 語言有一些坑,但是正如本篇文 ⌘ Read more
聊一聊跳錶數據結構**
背景------在討論那些 “不著名” 的數據結構時,跳錶經常會出現。但實際上它們並沒有那麼默默無聞,事實上許多生產級軟件都在積極地使用它們。在這篇文章中,我將描述如何製作一個玩具式的實現,以及潛在的性能優化和它們在現實世界中的使用案例,通過這三方面來探討跳錶。那麼什麼是跳錶呢?跳錶是一種指向性的數據結構,它的靈感來自鏈表和二叉樹。它們是排列在不同層級上的排序鏈表的集合,其中層級在設計上允許跳過部 ⌘ Read more
如何在 Go 中使用變量和常量**
變量 是一個需要掌握的重要編程概念。它們是代表你在程序中使用的值的符號。本教程將介紹一些變量基礎知識和在你創建的 Go 程序中使用它們的最佳實踐。理解變量----用術語來說,變量將存儲位置分配給與符號名稱或標識符相關的值。我們使用變量名來引用計算機程序中存儲的值。我們可以將變量視爲帶有名稱的標籤,您可以將其綁定到值上。假設我們有一個整數 1032049348 ,我們希望將它存儲在一個變量中,而不 ⌘ Read more
手寫了個可能是 Github 性能最強的 Go 跳錶**
作者:phongchen,騰訊 IEG 後臺開發工程師 2022 年 3 月,廣大人民期盼已久的支持的泛型的 go1.18 發佈了。但是目前基於泛型的容器實現還不多。我實現了一套類似 C++ 中 STL 的容器和算法庫。其中有序的 Map 選擇用跳錶來實現,並優化到了相當好的性能。在此分享一下優化的思路和心得,供大家參考借鑑,如果發現有錯誤也歡迎指出。一、背景首先爲標題黨致歉,不過確實沒吹牛 😊 ⌘ Read more
圖文結合!Redis 延遲隊列 golang 高效實踐**
導語 \\| 本文主要講述如何使用 golang 基於 Redis 實現延遲消息隊列組件。希望對有需求的同學有所幫助。 一、背景業務中經常會有這樣的場景:到期後自動執行指定操作; 查詢某個任務是否完成,未完成等待一定時間再次查詢; 回調通知,當回調失敗時,等待後重試;等等還有其他很多類似的場景。 很多時候我們會直接通過一個本地定時器來幫我們完成這個任務。如果我們的系統是多實例分佈式 ⌘ Read more
輕量級限流工具 throttle
throttled 是一個非常輕量且易擴展的限流組件,我們可以將它輕鬆地集成到應用程序中,以實現限流和配額管理的能力。簡介------throttled(https://github.com/throttled/throttled) 基於通用信元速率算法實現了對資源的訪問速率限制,資源可以是特定的 URL、用戶或者任何自定義的形式,可以很方便地與各種 http 和 rpc 框架進行集成。throt ⌘ Read more
「Go 工具箱」強烈推薦:一個能讓 http 請求回放的工具**
大家好,我是漁夫子。本號新推出「go 工具箱」系列,意在給大家分享使用 go 語言編寫的實用的、好玩的工具。在工作中,你一定遇到過要在服務器上抓包的場景,可又苦於找不到合適的工具。今天就給大家推薦一個使用 go 語言編寫的抓包工具 goreplay。goreplay 是一個可以抓取實時網絡包的工具,在 github 上 star 值高達 16k。其抓包原理是基於 https://github.coRead more
ngo:go 語言開發利器**
網易傳媒在 2021 年的時候就開始嘗試將線上的一些核心集羣使用 Go 語言進行重構,筆者有幸主導了本次 Go 語言重構,在本次重構中,爲了減少各業務不必要的調研時間,我們成立了一個攻堅小組,就業務用到的各種依賴進行了統一調研、封裝、測試,給各業務提供了統一的 Go 語言基礎框架,極大的增加了業務開發效率,避免了重複研究。之前筆者也就 Go 語言的一些特性、優勢及問題進行了闡述,說明了傳媒使用 G ⌘ Read more
必擼系列!Go 另外幾個黑魔法技巧彙總**
而最近一段時間,筆者重新梳理了一下 go 知識點,並深入地看看了它的源碼,在實踐中又有了新的沉澱,於是寫下這篇文章和大家分享一下。一、魔法:最小化運行時 (minimal runtime)我們知道,go 有一層很重的運行時 (runtime),包括內存管理、goroutine 調度等重要組件;這些組件極大地方便了應用程序的開發和迭代,但也帶來了一些問題,比如:Go 程序自動接管了內存,並自帶 GC ⌘ Read more
一文徹底理解 Go 語言棧內存 - 堆內存**
計算機爲什麼需要內存?計算機是運行自動化程序的載體,程序 (或稱之爲進程) 由可執行代碼被執行後產生。那麼計算機在運行程序的過程中爲什麼需要「內存」呢?爲了輕鬆理解這個問題,我們先來簡單看看:代碼的本質 可執行代碼被執行後,程序的運行過程 代碼的本質-----簡單來看代碼主要包含兩部分:指令部分:中央處理器 CPU 可執行的指令 數據部分:常量等 代碼包含了指令,代碼被轉化 ⌘ Read more
Go 語言中常見問題 - 接口污染**
在 Go 語言中,接口是我們設計和編寫代碼的基石。然而,像很多概念一樣,濫用它是不好的。接口污染是指用不必要的抽象來編寫代碼(刻意使用接口),使得代碼更難以理解。這是具有不同習慣,特別是有其它語言開發經驗的人會犯的一個常見錯誤。在深入討論接口污染之前,讓我們重新梳理一下 Go 語言的接口,然後分析何時使用接口以及在什麼時候使用會存在污染問題。接口接口約定了對象的行爲方法,用於創建多個對象可以實現的 ⌘ Read more
手把手教你實現 Golang 跨平臺編譯**
前言--大家好,我是星期八,是一個每天都要在鏡子前給自己梳僅剩三根頭髮的三年碼農。上面的文章,我們已經搭建了 Go 語言環境,可以戳這裏:手把手帶你進行 Golang 環境配置,還實現了第一個 Go 程序,本次我們來安排一下如何實現跨平臺編譯。跨平臺編譯-----跨平臺編譯,也叫交叉編譯,我可以在 win 平臺上,編譯成 linux 平臺可執行的文件。這也是 Go 備受青睞的原因,像 java,p ⌘ Read more
工廠模式有三個 Level,你能用 Go 寫到第幾層?**
設計模式中的工廠模式是我們編寫代碼時常用的一種建造型模式,用於創建指定類的實例。在不使用設計模式的時候,我們是怎麼創建類的實例的呢?別多想,這個問題沒坑,就是我們寫代碼時直接用 new 關鍵字,直接創建實例。比如 Java 語言裏是通過 new 關鍵字直接調用類的構造方法,完成實例的創建。class  Person {}Person p1 = new Person();而像 Go 語言這類,雖說是 ⌘ Read more
如何讓 Go 反射變快**
最近讀到一篇關於 Go 反射的文章,作者通過反射給結構體填充字段值的案例,充分利用 Go 的各種內在機理,逐步探討讓代碼運行得更快的姿勢。文章(原文地址:https://philpearl.github.io/post/aintnecessarilyslow/)非常有學習價值,故翻譯整理了下來。不要使用反射,除非你真的需要。但是當你不使用反射時,不要認爲這是因爲反射很慢,它也可以很快。反射允許你在Read more
VSCode 安裝 Go 環境(詳細教程)**
一、前言----最近算法本身工作第一階段目標也算接近完成了,接下來將模型進行部署的工作,算法模型工程化,服務化。這塊主要是用 GO。還是挺期待學一門新的語言的,經過這麼多年的算法毒打,導致現在基本上只會寫寫調包的 python。之前學嵌入式 PID 啥的寫寄存器 C 語言能力,寫 android 和服務器的 java 能力基本上在我身上都消失了。接下來準備學習下 GO 了。二、IDE 的下載--- ⌘ Read more
如何在 Gin 框架中使用泛型構建完全解耦的請求驗證層**
請求驗證可能是任何 Web 框架中最無聊但最關鍵的中間層。今天,我將展示在 golang 中的 gin 框架 中(使用泛型)的正確實踐。1. 目標---------Gin 與 validator 庫集成以進行請求驗證,即 模型綁定與驗證。我們將在很大程度上依靠這一點來實現我們的目標。我們的目標是: 構建一個抽象,通過這個抽象使得請求驗證與請求處理程序完全解耦,例如,在您的常規 gin 的 han ⌘ Read more
Golang 中反射的應用與理解**
首先來一段簡單的代碼邏輯熱身,下面的代碼大家覺得應該會打印什麼呢?type OKR struct { id int content string}func getOkrDetail(ctx context.Context, okrId int) (OKR, okrErr.OkrErr) { return &OKR{id: okrId, content: fmt.Sprint( ⌘ Read more
Go 減少代碼的嵌套層數**
軟件開發中的 “心智模型” 用於描述開發人員在編碼時心理活動,每段代碼其實是人在編寫這段代碼時的心智模型投射,不能把代碼看成是客觀的存在,而是主觀的產物,參合了當時心理活動或各種直覺感知。在編程時,必須不斷維護心智模型,例如關於整體代碼交互和功能實現的心智模型,代碼是否具有可讀性,代碼風格,變量命名規範等。可讀性強的代碼需要的心智模型更簡單,更容易閱讀和維護。代碼嵌套層級的數量是影響可讀性的一個關 ⌘ Read more
Go 組件:context 學習筆記!**
最近學習 go 有一段時間了,在網上一直看到別人推薦,學 go 可以學習裏面的 context 源碼,短小精悍。看了下確實有所收穫,本文是基於我最近對 context 源碼學習的一些心得積累,望大家不吝賜教。一、爲什麼使用 Context(一)go 的扛把子----------要論 go 最津津樂道的功能莫過於 go 強大而簡潔的併發能力。func main(){ go func(){ f ⌘ Read more
Go 1-19 中的原子指針**
在計算機編程中,” 原子” 是指一次執行一個操作。Objective-C有原子屬性,它確保了從不同的線程對一個屬性進行安全的讀寫。在Objective-C中,它是與不可變類型一起使用的。這是因爲爲了改變不可變類型,實際上是 “重新創建” 它。換句話說,在你的代碼中改變一個不可變的類型不會導致編譯器拋出一個錯誤。然而,當你這樣做的時候,它會實例化一個新的對象。一個典型的例子是Go的append函數, ⌘ Read more
Go 編譯器優化**
死代碼消除死代碼消除( dead code elimination, 縮寫 DCE )是用來移除對程序執行結果沒有任何影響的代碼,以此 減少程序的體積大小 ,並且還可以避免程序在執行過程中進行一些不必要的運算行爲,從而 減少執行時間 。需要注意的是,除了不會執行到的代碼( unreachable code ),一些只會影響到無關程序執行結果的變量( dead variables ),也屬於死碼( ⌘ Read more
Go 眼中的文件系統是什麼? io-FS
什麼神奇問題 ?Go 在文件 IO 的場景有個神奇的事情。打開一個文件的時候,返回的竟然不是 interface ,而是一個 os.File  結構體的指針。func Open(name string) (File, error) {    return OpenFile(name, O\\_RDONLY, 0)}劃重點:這個意味着,Go 的文件系統的概念和 OS 的文件系統的概念直接關聯起來。你必須 ⌘ Read more
Go:服務發現原理分析與源碼解讀**
在微服務架構中,有許多繞不開的技術話題。比如服務發現、負載均衡、指標監控、鏈路追蹤,以及服務治理相關的超時控制、熔斷、降級、限流等,還有 RPC 框架。這些都是微服務架構的基礎,只有打牢這些基礎,纔敢說對微服務是有了一點理解,出門也好意思和別人打招呼了,被人提問的時候也能侃侃而談了,線上出了問題往往也能尋根溯源內心不慌了,旁邊的女同事小芳看着你的時候也是滿眼的小可愛了。在《微服務實踐》公衆號,之前 ⌘ Read more
gomonkey 用戶如何對泛型打樁**
我是一隻可愛的土撥鼠,專注於分享 Go 職場、招聘和求職,解 Gopher 之憂!歡迎關注我。問題的由來-----在 gomonkey[1] 社區,用戶 ericuni 提了一個 issue[2],如下圖所示:issue-95.png泛型是 Go1.18 引入的一個新特性,筆者在本地升級 Go 版本到 Go1.18,復現了問題。 (1)產品代碼示例:func AddT int \\| float ⌘ Read more
Go 中處理字符串的介紹**
字符串是由一個或多個字符 (字母、數字、符號) 組成的序列,這些字符可以是常量,也可以是變量。字符串由 Unicode 組成,是不可變的序列,這意味着它們是不變的。因爲文本是我們日常生活中使用的常見數據形式,所以字符串數據類型是編程中一個非常重要的基石。本 Go 教程將介紹如何創建和打印字符串,如何連接和複製字符串,以及如何在變量中存儲字符串。字符串文字-----在 Go 中,字符串存在於反引號 ⌘ Read more
Go 只會 if err -- nil?這是不對的,分享這些優雅的處理姿勢給你!**
大家好,我是煎魚。本篇仍然是錯誤專場,是 Go 諺語中的 Don't just check errors, handle them gracefully[1],原文章同名,作者是 @Dave Cheney。以下的 “我” 均指代原作者。這條諺語和 Errors are value 關聯性很強,是互解答的,和煎魚一起學習吧!錯誤只是值-----我花了很多時間來思考處理 Go 程序中錯誤的最佳方法。我 ⌘ Read more
Go 語言怎麼處理三方接口返回數據?**
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹在使用 Go 語言調用三方RESTful接口時,因爲無法直接操作 json 字符串,所以我們需要先將 json 字符串轉換爲 map 或 struct。本文我們介紹一下怎麼處理三方接口返回數據。 ⌘ Read more
最簡單的單例模式,Go 版本的實現你寫對了嗎?**
大家好,我是網管,首先我問大家一個問題,你們面試的時候,面試官有沒有問過你們:"你都用過什麼設計模式?",我猜多數人的回答會把單例模式,放在第一位。我:"呃… 我用過單例、工廠、觀察者,反向代理,裝飾器,哨兵"…. ",面試官內心 OS:"我都沒用過這麼多... 反向代理是什麼鬼,這小子背串了吧,不管了先就坡下驢,從頭開始問"。面試官:"用過的挺多哈,那麼你能說下單例你都在什麼情況下用,順便在這張 ⌘ Read more
夥計,Go 項目怎麼使用枚舉?**
前言\\-\\- 哈嘍,大家好,我是asong。枚舉是一種很重要的數據類型,在java、C語言等主流編程語言中都支持了枚舉類型,但是在 Go 語言中卻沒有枚舉類型,那有什麼替代方案嗎?本文我們來聊一聊這個事情;爲什麼要有枚舉-------我們以java語言爲例子,在JDK1.5之前沒有枚舉類型,我們通常會使用int常量來表示枚舉,一般使用如下:public static final int COLORR ⌘ Read more
負載均衡原理分析與源碼解讀**
上一篇文章一起學習了 Resolver 的原理和源碼分析,本篇繼續和大家一起學習下和 Resolver 關係密切的 Balancer 的相關內容。這裏說的負載均衡主要指數據中心內的負載均衡,即 RPC 間的負載均衡。傳送門 服務發現原理分析與源碼解讀基於 go-zero v1.3.5 和 grpc-go v1.47.0負載均衡----每一個被調用服務都會有多個實例,那麼服務的調用方應該將請求,發向 ⌘ Read more
面試官:哥們 Go 語言互斥鎖瞭解到什麼程度了?**
前言\\-\\- 哈嘍,大家好,我是asong。 當提到併發編程、多線程編程時,都會在第一時間想到鎖,鎖是併發編程中的同步原語,他可以保證多線程在訪問同一片內存時不會出現競爭來保證併發安全;在Go語言中更推崇由channel通過通信的方式實現共享內存,這個設計點與許多主流編程語言不一致,但是Go語言也在sync包中提供了互斥鎖、讀寫鎖,畢竟channel也不能滿足所有場景,互斥鎖、讀寫鎖的使用與我 ⌘ Read more
Go 每日一庫之微服務開發框架 DMicro 的設計思路**
來源 \\| OSCHINA 社區 作者 \\| ClownFish原文鏈接:https://my.oschina.net/clownfish/blog/5560923DMicro 源碼地址:GitHub: https://github.com/osgochina/dmicro Gitee: https://gitee.com/osgochina/dmicro 背景--DMicro 誕生的背 ⌘ Read more
搞清楚 Go Mod 的版本和僞版本,下次別亂用了**
關於 Go 項目的依賴管理的日常使用以及遇到的問題怎麼解決,俺已經寫過兩篇文章了。項目使用 GoModules 管理依賴的方法和經驗總結 Go Modules 怎麼管理私有依賴 今天再跟大家嘮一下 Go Module 中軟件包的版本和僞版本的內容,因爲這是一個理想很豐滿、現實很骨感的故事。Module 的版本----------關於 Go Module 依賴包的軟件版本,這塊知識就很中 ⌘ Read more
Go 結合反射輕鬆將結構體轉換成 Excel
Excel 中的一些概念------------ 1. 一個 excel 文件中可以包含多個sheet,一個sheet可以理解成一個表格 2. 表格的每一行稱爲 Row 3. 表格的每一行中的任意一個單元格稱爲 Cell 使用tealeg操作 Excel------------------安裝tealeggo get github.com/tealeg/xlsx使用t ⌘ Read more
Go 每日一庫之 Redis Web 端管理工具**
GRM 是基於 go+vue 的 web 版 redis 管理工具,部署簡單便捷,支持 SSH 連接,用戶校驗,操作日誌、命令行模式、LUA 腳本執行等功能。介紹基於 go+vue 的 web 版 redis 管理工具【Web redis management tool based on golang and vue】功能清單管理連接 (直連和 SSH)、切換 DB 支持 string/li ⌘ Read more
Go 語言使用 goroutine 運行閉包的 “坑”**
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹在 Go 語言中,函數支持匿名函數,閉包就是一種特殊的匿名函數,它可以用於訪問函數體外部的變量。需要注意的是,在 for ... range ... 中,使用 goroutine 執行閉包時,經 ⌘ Read more
一文搞懂 go gc 垃圾回收原理**
什麼是垃圾回收-------我們在程序中定義一個變量,會在內存中開闢相應內存空間進行存儲,當不需要此變量後,需要手動銷燬此對象,並釋放內存。而這種對不再使用的內存資源進行自動回收的功能即爲垃圾回收(Garbage Collection,縮寫爲 GC),是一種自動內存管理機制如何識別垃圾------引用計數算法 (reference counting)引用計數通過在對象上增加自己被引用的次數,被其他 ⌘ Read more
可視化 Go 內存管理**
在本章中,我們將研究 Go 編程語言(Golang)[1] 的內存管理。和 C/C++、Rust 等一樣,Go 是一種靜態類型的編譯型語言。因此,Go 不需要 VM,Go 應用程序二進制文件中嵌入了一個小型運行時 (Go runtime),可以處理諸如垃圾收集 (GC),調度和併發之類的語言功能。Go 內部內存結構---------首先,讓我們看看 Go 內部的內存結構是什麼樣子的。 Go 運行 ⌘ Read more
函數式編程在 Go 泛型下的實用性探索**
我是一隻可愛的土撥鼠,專注於分享 Go 職場、招聘和求職,解 Gopher 之憂!歡迎關注我。 歡迎大家加入 Go 招聘交流羣,來這裏找志同道合的小夥伴!跟土撥鼠們一起交流學習。背景--函數式編程(Functional Programming / FP)作爲一種編程範式,具有無狀態、無副作用、併發友好、抽象程度高等優點。目前流行的編程語言(C++、Python、Rust)都或多或少地引入 ⌘ Read more
細嗦 Golang 的指針**
與 C 語言一樣,Go 語言中同樣有指針,通過指針,我們可以只傳遞變量的內存地址,而不是傳遞整個變量,這在一定程度上可以節省內存的佔用,但凡事有利有弊,Go 指針在使用也有一些注意點,稍不留神就會踩坑,下面就讓我們一起來細嗦下。1. 指針類型的變量在 Golang 中,我們可以通過取地址符號 & 得到變量的地址,而這個新的變量就是一個指針類型的變量,指針變量與普通變量的區別在於,它存的是內存地址, ⌘ Read more
Go 語言標準庫中最常用的標識符是什麼?**
爭做團隊核心程序員,關注「幽鬼」這篇文章是來自最新 justforfunc[1] 中同標題的一段。這個程序的代碼 [2] 可以在 justforfunc 倉庫 [3] 中找到。問題陳述----想象一下,對於下面的代碼段,你如何將其中所有的標識符都提取出來。package mainimport "fmt"func main() { fmt.Println("Hello, world")}我們期望可以 ⌘ Read more
7 年後,發現用 Go 實現 CockroachDB 是正確的選擇**
大家好,我是程序員幽鬼。分享 CockroachDB 團隊使用 Go 的體會。 在 7 年前(2051 年 11 月 3 日),選擇用 Go 實現 CockroachDB。現在回顧當初的選擇。許多開發人員問我們的第一個問題是,我們在使用垃圾收集語言 Go 編寫分佈式數據庫方面的經驗是什麼。JVM 垃圾收集是出了名的昂貴(耗資源),所以我們用 Go 構建 CockroachDB 不是冒性能風險嗎?事 ⌘ Read more
Go 語言短變量聲明的 “坑”**
01 介紹在使用 Go 語言進行項目開發時,我們經常會在定義變量時使用 Go 語言的一個語法糖 - 短變量聲明,它雖然好用,但是也會有讓我們不小心就會掉進的 “坑”。本文我們介紹一個 Go 語言短變量聲明最容易讓程序員掉進的 “坑”。02 短變量聲明的 “坑”Go 語言提供了短變量聲明的語法糖,短變量聲明讓 Go 語言的變量聲明更加方便,代碼更加簡潔。但是,它真的百利無一害嗎?我們先閱讀一段示例代 ⌘ Read more
不想 Go 錯誤處理太臃腫,可以參考這個代碼設計**
最近寫了個程序,因爲是急活(貌似沒有不急的...),所以這個程序又是我東拷一段,西粘一塊拼出來的。代碼寫完了後,感覺這代碼屎一樣,都快把自己看哭了。真的是在心裏邊寫別罵,先是罵以前做這個項目的人蠢,項目搞的跟屎一樣,後來代碼跑起來了,順利交工後,變成了罵我自己蠢,這麼寫又不是不能用!不過在這個過程中,先不提項目裏的業務邏輯、接口設計合不合理的事兒,這個我覺得在時間緊,加上人員更迭快的時候,正常人都 ⌘ Read more
如何使用 Elastic APM Go 代理爲 Go 應用裝載測量工具**
我是一隻可愛的土撥鼠,專注於分享 Go 職場、招聘和求職,解 Gopher 之憂!歡迎關注我。Elastic APM[1](應用程序性能監測)能夠全面洞見應用程序性能和洞悉分佈式工作負載,且正式支持多種語言,包括 Go[2]、Java[3]、Ruby[4]、Python[5] 和 JavaScript(Node.js[6] 和用於瀏覽器的真實用戶監測 [7] (RUM))。要獲得這些對性能的洞 ⌘ Read more
Go 每日一庫之一個好玩的 Go 語言 REPL 工具**
簡介--週末閒逛 GitHub 的時候發現一個很好玩的 Go 語言的 REPL(read-eval-print-loop)工具。本文和大家分享一下這個工具:gore。首先放一張 GitHub 的動圖感受一下:快速使用----gore 是一個命令行工具,需要配合 Go Module 安裝。Go 環境安裝完成之後,執行下面的命令安裝 gore:$ go install github.com/x-mot ⌘ Read more
從 -go 文本文件到可執行文件**
Go 是一門編譯型語言,我們平時所編寫的 .go 文本文件稱爲源文件,源文件裏面的內容就是我們的源代碼。源代碼要想在目標機器上運行,就必須使用 Go compiler (縮寫 gc ,指代 Go 編譯器)將其先編譯成操作系統能夠直接識別的二進制機器碼文件,或說可執行文件。後續由操作系統加載該文件,並在 CPU 中直接運行機器碼。這也是編譯型語言運行效率高的主要原因。Go compiler 是用什麼 ⌘ Read more
golang 協程設計與調度原理**
協程設計 \\- GMP 模型-------------線程是操作系統調度到 CPU 中執行的基本單位,多線程總是交替式地搶佔 CPU 的時間片,線程在上下文的切換過程中需要經過操作系統用戶態與內核態的切換。golang 的協程 (G) 依然運行在工作線程 (M) 之上,但是藉助語言的調度器,協程只需要在用戶態即可完成切換,工作線程是感受不到協程存在的。golang 在設計上通過邏輯處理器 (P) 建 ⌘ Read more
Go 語言 GC 原理和實踐精講**
—1 — 簡介本指南旨在幫助高級 Go 語言用戶更好地瞭解 Go 語言垃圾回收器的使用成本。它還提供了 Go 用戶如何利用這些知識來提高應用程序的資源利用率的指導。它並不假設你瞭解垃圾回收,但假設你熟悉 Go 語言。Go 語言負責安排 Go 語言值的存儲。在大多數情況下,Go 語言開發人員根本不需要關心這些值存儲在哪裏,或者爲什麼要存儲。然而,在實踐中,這些值通常需要存儲在計算機物理內存中,而物 ⌘ Read more
圖解 Go 協程原理及實戰**
引言Golang 的語法和運行時直接內置了對併發的支持。Golang 裏的併發指的是能讓某個函數獨立於其他函數運行的能力。當一個函數創建爲 goroutine 時,Golang 會將其視爲一個獨立的工作單元。這個單元會被調度到可用的邏輯處理器上執行。Golang 運行時的調度器是一個複雜的軟件,能管理被創建的所有 goroutine 併爲其分配執行時間。這個調度器在操作系統之上,將操作系統的線程與 ⌘ Read more
Go:說說 log-Fatal 和 panic 的區別**
要熟悉兩者區別之前,需要先了解 os.Exit() 函數。我這裏截一張 Go 源碼裏面的解釋:我們需要注意兩點:1、應用程序會被馬上退出2、defer 函數不會被執行你可以理解這就是直接 kill -9 程序,不給任何喘氣的機會。現在我們再來看看 log.Fatal 函數的定義:整體來說,他在 os.Exit() 之前做了一個日誌輸出。他的流程可以理解是:1、打印輸出內容2、退出應用程序3、def ⌘ Read more
Go 上下文 context 底層原理**
context 介紹-------------很多時候,我們會遇到這樣的情況,上層與下層的 goroutine 需要同時取消,這樣就涉及到了 goroutine 間的通信。在 Go 中,推薦我們以通信的方式共享內存,而不是以共享內存的方式通信。所以,就需要用到 channl,但是,在上述場景中,如果需要自己去處理 channl 的業務邏輯,就會有很多費時費力的重複工作,因此,context 出現了 ⌘ Read more
Go 語言中常見問題 - 忽視表驅動測試**
表驅動測試是編寫精簡測試的一種有效技術。它減少了樣板代碼(具有固定模式的代碼塊,冗餘但是又不得不寫),幫助我們更加專注於重要的事情:測試邏輯。本文將通過一個具體的例子來說明爲什麼使用表驅動測試值得我們瞭解。下面函數實現的功能是將給定字符串的後綴 \\ n 或 \\ r\\\\n 全部刪除,直到末尾不含換行符 \\ n 或 \\ r\\\\n 終止。func removeNewLineSuffixes(s string ⌘ Read more
使用 expvar 暴露 Go 程序運行指標**
獲取應用程序的運行指標,可以讓我們更好地瞭解它的實際狀況。將這些指標對接到 prometheus、zabbix 等監控系統,能夠對應用程序持續檢測,發現異常可以及時告警並得到處理。Pull 與 Push-----------與監控系統對接方式有兩種,一種是 Pull(拉取),另外一種 Push(推送)。以 Prometheus 爲例,應用程序通過暴露出 HTTP 接口,讓 Prometheus 週 ⌘ Read more
Go 語言內存逃逸案例**
01 介紹在「Go 語言逃逸分析」中,我們瞭解到內存分配的相關知識,棧空間分配開銷小,堆空間分配開銷大。Go 語言編譯器可以通過逃逸分析決定內存分配到棧空間或堆空間。但是,分配到棧空間的對象在某些情況中會逃逸到堆空間。我們可以使用 Go 工具鏈查看對象是否發生內存逃逸。爲了提升 Go 應用程序的性能,我們應該避免 Go 應用程序中出現內存逃逸的現象,本文我們介紹 Go 語言內存逃逸的幾種典型案例。 ⌘ Read more
Go 原生插件使用問題全解析**
導言本人在設計和落地基於 Go 原生插件機制的擴展開發產品時踩到了很多坑,由於這方面相關資料很少,因而藉此機會做一個非常粗淺的總結,希望能對大家有所幫助。本文只說問題和解決方案,不讀代碼。一些背景知識2.1 運行時通常而言,在計算機編程語言領域,“運行時”的概念和一些需要使用到 vm 的語言相關。程序的運行由兩個部分組成:目標代碼和 “虛擬機”。比如最爲典型的 JAVA,即 Java Class ⌘ Read more
使用 OpenCensus 跟蹤 Gorm 查詢**
Gorm 作爲 Go 語言中很常用的一個 ORM 庫,功能非常強大。應用程序的大量時間都花在通過 gorm 與數據庫連接上面,所以我們想在鏈路跟蹤中獲得更好的視圖。幸運的是,Gorm 有完美的鉤子,我們可以通過 Callbacks API 將跟蹤功能注入到數據庫處理當中。Callbacks API 允許我們爲 Gorm 提供在查詢生命週期的特定部分中執行相應的函數,或者允許您在傳統的中間件方法中更 ⌘ Read more
這十二個 Go 語法糖,利好每日摸魚**
前言\\-\\- 每門語言都有自己的語法糖,像java的語法糖就有方法變長參數、拆箱與裝箱、枚舉、for-each等等,Go語言也不例外,其也有自己的語法糖,掌握這些語法糖可以助我們提高開發的效率,所以本文就來介紹一些Go語言的語法糖,總結的可能不能全,歡迎評論區補充。可變長參數-----Go語言允許一個函數把任意數量的值作爲參數,Go語言內置了... 操作符,在函數的最後一個形參才能使用... 操作符 ⌘ Read more
Go 每日一庫之 roaring
簡介--集合是軟件中的基本抽象。實現集合的方法有很多,例如 hash set、tree 等。要實現一個整數集合,位圖(bitmap,也稱爲 bitset 位集合,bitvector 位向量)是個不錯的方法。使用 n 個位(bit),我們可以表示整數範圍[0, n)。如果整數 i 在集合中,第 i 位設置爲 1。這樣集合的交集(intersection)、並集(unions)和差集(differen ⌘ Read more
把「Go 靜態分析」放進你的工具箱**
背景--提到靜態分析,大家第一反應可能是 Sonar、FindBugs 等靜態代碼檢查工具,它通過對源碼的分析,不實際運行代碼,檢查代碼是否符合編碼規範,發現源碼中潛在的漏洞。這當中主要通過靜態編譯相關技術,其實大家在日常的業務代碼開發過程中藉助 IDE,使用的代碼格式化、查找某方法的定義 / 調用等功能也是基於這套技術實現的。本文期望擴充靜態分析的定義,泛指所有通過靜態編譯相關技術實現的工具,不 ⌘ Read more
如何用 Go 實現一個異步網絡庫?**
導語 \\| 在需要高性能、節省資源的場景下,比如海量的連接、很高的併發,我們發現 Go 開始變得喫力,不但內存開銷大,而且還會有頻繁的 goroutine 調度。GC 時間也變得越來越長,甚至還會把系統搞掛。這時,我們就可以考慮用 Go 構建經典的 Reactor 網絡模型,來應對這種場景。一、常見的服務端網絡編程模型在具體講 Reactor 網絡庫的實現前,我們先快速回顧下常見的服務端網絡編程模型 ⌘ Read more
Golang 泛型初識**
本文主要是介紹 Golang 泛型的基本要素,泛型的一些通用代碼的實踐。 分爲以下四個部分 1. 簡介 2. 泛型的基本元素 3. 泛型實踐 4. 總結 簡介--泛型是什麼?泛型編程是一種計算機編程風格,編程範式,其中算法是根據稍後指定的類型編寫的,然後在需要時爲作爲參數提供的特定類型實例化。常用的的編程語言也基本都支持泛型這一特性,例如 C++、C#、 ⌘ Read more
學會 Go 中的時間處理**
作爲程序員,我們經常需要對時間進行處理。在 Go 中,標準庫 time 提供了對應的能力。本文將介紹 time 庫中一些重要的函數和方法,希望能幫助到那些一遇到 Go 時間處理問題就需要百度的童鞋。應對時區問題------在編程中,我們經常會遭遇八小時時間差問題。這是由時區差異引起的,爲了能更好地解決它們,我們需要理解幾個時間定義標準。GMT(Greenwich Mean Time),格林威治平時 ⌘ Read more
Go 方法選擇器的正規化**
Go 允許一些選擇器的簡化形式。例如,在下面這個程序中,t1.M1 是 (t1).M1 的簡化形式,而 t2.M2 則是 (&t2).M2 的簡化形式。在編譯時,編譯器將把簡化的形式正規化爲它們原來各自的完整形式。下面這個程序打印出 0 和 9,因爲對 t1.X 的修改對 (t1).M1 的估值結果沒有影響。package maintype T struct { X int}func (t T) ⌘ Read more
Go 語言中的數據競爭模式**
譯者 \\| 陳峻 策劃 \\| 雲昭本文主要基於在 Uber 的 Go monorepo 中發現的各種數據競爭模式,分析了其背後的原因與分類,希望能夠幫助更多的 Go 開發人員,去關注併發代碼的編寫,考慮不同的語言的特性、以及避免由於自身編程習慣所引發的併發錯誤。近年來,Uber 已經開始採用 Golang(簡稱 Go)作爲開發微服務的主要編程語言。目前,其 Go monorepo(譯者注:包含多個不 ⌘ Read more
Go 垃圾回收器指南**
簡介--本指南旨在幫助高級 Go 語言用戶更好地瞭解 Go 語言垃圾回收器的使用成本。它還提供了 Go 用戶如何利用這些知識來提高應用程序的資源利用率的指導。它並不假設你瞭解垃圾回收,但假設你熟悉 Go 語言。Go 語言負責安排 Go 語言值的存儲。在大多數情況下,Go 語言開發人員根本不需要關心這些值存儲在哪裏,或者爲什麼要存儲。然而,在實踐中,這些值通常需要存儲在計算機物理內存中,而物理內存是 ⌘ Read more
使用 Go 基於國密算法實現雙向認證**
國內做 2B(to Biz) 或 2G(to Gov) 產品和解決方案的企業都繞不過國密算法,越來越多的國內甲方在採購需求中包含了基於國密算法的認證、簽名、加密等需求。對於國內的車聯網平臺來說,支持基於國密的雙向認證也是大勢所趨。在這篇文章中,我就來說說如何基於國密算法實現雙向認證,即使用國密算法的安全傳輸層雙向認證。 一. 簡要回顧基於 TLS 的雙向認證在《Go 語言精進之路》[1] 第 2 ⌘ Read more
拒絕 Go 代碼臃腫,其實在這幾塊可以用下觀察者模式**
今天學習一下用 Go 實現觀察者模式,觀察者模式主要是用來實現事件驅動編程。事件驅動編程的應用還是挺廣的,除了我們都知道的能夠用來解耦:用戶修改密碼後,給用戶發短信進行風險提示之類的典型場景,在微服務架構實現最終一致性、實現事件源(A + ES)這些都會用到。我們先來簡單學習一下用 Go 實現觀察者設計模式,給怎麼實現事件驅動編程、事件源這些模式做個鋪墊。主要也是我也老沒看設計模式了,一起再複習一 ⌘ Read more
Go 每日一庫之 bitset
簡介--我們都知道計算機是基於二進制的,位運算是計算機的基礎運算。位運算的優勢很明顯,CPU 指令原生支持、速度快。基於位運算的位集合在有限的場景中替換集合數據結構可以收到意想不到的效果。bitset庫實現了位集合及相關操作,不妨拿來即用。安裝--本文代碼使用 Go Modules。創建目錄並初始化:$ mkdir -p bitset && cd bitset$ go mod init githu ⌘ Read more
試試動 Go recover 刀子,看看能不能優化錯誤處理?**
大家好,我是煎魚。Go 的錯誤處理一直是表現最突出的一塊地方,許許多多的同學都提出了各種提案,例如:引入 try-catch、用 panic 代替 if err != nil、引入新的關鍵字等。但這些都被一一駁回了。不過社區依然還沒放棄,週末看到有一個新的提案《proposal: runtime: add parameters to recover to only return specific ⌘ Read more=
Windows 系統的 Gopher 們久等了!!**
。今天我們將介紹《如何在 Windows 10 上安裝 Go 和設置本地編程環境》,以供不同系統使用者選擇學習。話不多說,我們開始 : 如何在 Windows 10 上安裝 Go 和設置本地編程環境Go 語言簡介-------Go 是一門在 Google 備受挫折後而誕生的語言。開發者不得不頻繁地在兩門語言中選擇,要麼選擇一門執行效率高但是編譯時間長的語言,要麼選擇一種易於編程但在生產中運行效率低 ⌘ Read more
Go: 在回覆HTTP請求後忘記寫return**
在編寫 HTTP 處理程序時,容易在已經回覆 HTTP 請求後忘記返回語句。這可能會導致奇怪的事情產生,我們期望在發生錯誤後停止處理程序,然而實際中並沒有停止。下面的例子描述了這種情況。func handler(w http.ResponseWriter, req http.Request) {        err := foo(req)        if err != nil { ⌘ Read more
十年磨一劍 go 1-18 泛型**
泛型引入了抽象,無用的抽象帶來複雜性。什麼是泛型-----泛型程序設計(generic programming)是程序設計語言的一種風格或範式。泛型允許程序員在強類型程序設計語言中編寫代碼時使用一些以後才指定的類型,在實例化時作爲參數指明這些類型。各種程序設計語言和其編譯器、運行環境對泛型的支持均不一樣。Java 和 C# 稱之爲泛型(generics)ML、Scala 和 Haskell 稱 ⌘ Read more
編寫 go 語言代碼三條基本原則**
這是一篇翻譯文章,爲了使讀者更好的理解,會在原文翻譯的基礎增加一些講解或描述。 軟件工程是當您添加時間和其他程序員時編程發生的事情。— Russ CoxRuss 正在區分軟件編程和軟件工程。前者是您爲自己編寫的程序,後者是隨着時間的推移許多人會使用的產品。工程師會來來去去,團隊會擴大和縮小,需求會改變,功能會被添加,錯誤會被修復。這是軟件工程的本質。三條基本原則清晰可讀 化繁爲簡 生 ⌘ Read more
Go 每日一庫之 godotenv
簡介--twelve-factor 應用提倡將配置存儲在環境變量中。任何從開發環境切換到生產環境時需要修改的東西都從代碼抽取到環境變量裏。 但是在實際開發中,如果同一臺機器運行多個項目,設置環境變量容易衝突,不實用。godotenv 庫從.env文件中讀取配置, 然後存儲到程序的環境變量中。在代碼中可以使用讀取非常方便。godotenv源於一個 Ruby 的開源項目 dotenv。快速使用-- ⌘ Read more
Go 1-18 的那些事 -- 工作區、模糊測試、泛型**
前言--2022 年 3 月 15 日,Google 發佈了萬衆矚目的 Golang 1.18,帶來了好幾個重大的新特性,包括:解決本地同時開發多個倉庫帶來的一些問題的工作區(Workspace) 能夠自動探測代碼分支,隨機生成輸入,並且檢查代碼是否會 panic 的模糊測試(Fuzzing Test) 衆多開發者盼星星盼月亮終於等到的泛型支持。 本文將簡單講述這三個特性的相 ⌘ Read more
超全總結:Go 語言如何操作文件**
前言\\-\\- 哈嘍,大家好,我是asong。 我們都知道在Unix中萬物都被稱爲文件,文件處理是一個非常常見的問題,所以本文就總結了Go語言操作文件的常見方式,整體思路如下:Go 語言版本:1.18本文所有代碼已經上傳github:https://github.com/asong2020/GolangDream/tree/master/codedemo/fileoperatedemo操作文件包Read more
Go 語言逃逸分析**
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹熟悉 C / C++ 的讀者朋友們應該都知道一個進程(應用程序)的虛擬內存空間劃分爲棧內存區和堆內存區。棧內存區上對象的內存空間是自動分配和銷燬的,使用者無需關心。但是,堆內存區上對象的內存空間 ⌘ Read more
Go 中的 Kubernetes GraphQL 查詢**
搭建 GraphQL 服務器,用於在集羣中搜索 Kubernetes 資源在共享集羣治理中,我們的部分責任是允許用戶訪問他們的資源,我們通過 RBAC 來分配合理的權限並通過 kubectl 啓用用戶的查詢。對於後端開發人員來說 “沒有障礙”,而對於不熟悉命令行操作或 kubectl 、Web 和數據開發人員等用戶來說則不是這樣。那麼我們該如何爲用戶掃清障礙呢?我們通過 UI 可查詢界面實現了這一 ⌘ Read more
用 Go 跑的更快:使用 Golang 爲機器學習服務**
因此,我們的要求是用盡可能少的資源完成每秒 300 萬次的預測。值得慶幸的是,這是一種比較簡單的推薦系統模型,即多臂老虎機(MAB)。多臂老虎機通常涉及從 Beta 分佈 等分佈中取樣。這也是花費時間最多的地方。如果我們能同時做盡可能多的採樣,我們就能很好地利用資源。最大限度地提高資源利用率是減少模型所需總體資源的關鍵。 我們目前的預測服務是用 Python 編寫的微服務,它們遵循以下一般結構: ⌘ Read more
Go: time-After導致內存泄露**
time.After 導致內存泄露time.After(time.Duration) 的功能是當持續的時間結束後,會將當前的時間發送到返回的通道中。在某個時間到後執行某個動作可以用 time.After 來實現,它使用起來非常方便,在併發程序中用的比較多。如果我們只是想讓程序睡眠一段時間,可以使用 time.Sleep(time.Duration). time.After 主要用在 “如果在 5 ⌘ Read more
Go 如何打包與壓縮文件**
文件的打包、壓縮與解壓縮是經常會使用到的功能,我們可以通過 tar、gzip 等工具來完成這些操作。在 Go 中,標準庫archive與compress爲我們提供了這些能力,通過本文示例,你會發現以 Go 編程的方式生成與處理壓縮打包文件也非常簡單。打包和壓縮-----在開始代碼之前,我們需要明確打包和壓縮的概念。打包,又被稱爲歸檔,指的是一個文件或目錄的集合,而這個集合被存儲在一個文件中。 ⌘ Read more
Go 語言怎麼使用變長參數函數?**
01 介紹Go 語言中函數的最後一個參數可以是變長參數,細心的讀者朋友們可能已經發現,在 Go 語言標準庫 fmt包中就有使用變長參數函數,比如 Println 和 Printf。我們在使用 Go 語言開發應用程序時,也可以在合適的場景使用變長參數函數,使我們的代碼更優雅。02 變長參數顧名思義,變長參數是指參數的數量不固定,可以是 0 個,1 個或多個。變長參數的格式是 ...T,在參數的類型前 ⌘ Read more
Go 面試官:值爲 nil 爲什麼不等於 nil ?**
小明同學去面試被問到了這麼一個面試題,請看代碼:var f func()var a struct{}list := []interface{}{f, a}for , item := range list { if item == nil {  fmt.Println("nil") }}請問輸出結果是啥?可能很多同學,會認爲結果是輸出兩個 nil。爲什麼呢?因爲 f 和 a 都沒初始化,都是 nil ⌘ Read more
Go 項目實戰—參數綁定,類型轉換**
goshop 開源項目的更新 備註:前面項目中用到的代碼已經分享到 GitHub 中去了,並且以後所有項目中會出現的代碼都會提交上去,歡迎查閱。感興趣的可以點個 star 哦~   https://gitee.com/jobhandsome/goshop/最近在研究微服務框架 go-zero,沒有更新,在這裏說聲抱歉,後面會持續更新新的功能。請繼續關注 今天考慮參數綁定獲取。這裏肯定有些 ⌘ Read more