# 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=1679
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1779
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog-go/twtxt.txt&offset=1579
Go 語言跨平臺文件監聽庫 fsnotify 怎麼使用?**
01 介紹Go 語言作爲靜態編譯型語言,每次修改配置文件後,我們都需要重新編譯,修改的配置信息纔可以生效,而動態編譯型語言修改配置文件可以自動生效,相對來說更方便一些。但是,我們可以使用三方開源庫 fsnotify,這是一款非常流行的文件系統監聽庫,很多開源的三方庫也都使用該庫實現監聽文件變更,比如我們之前介紹的非常流行的管理配置信息開源庫 viper。02 fsnotify 源碼解讀NewWat ⌘ Read more
如何用 go 實現一個 ORM
本期作者洪勝傑B 端技術中心高級開發工程師爲了提高開發效率和質量,我們常常需要 ORM 來幫助我們快速實現持久層增刪改查 API,目前 go 語言實現的 ORM 有很多種,他們都有自己的優劣點,有的實現簡單,有的功能複雜,有的 API 十分優雅。在使用了多個類似的工具之後,總是會發現某些點無法滿足解決我們生產環境中碰到的實際問題,比如無法集成公司內部的監控,Trace 組件,沒有 database ⌘ Read more
Go 語言的垃圾回收**
Go [ = v1.5] 的新垃圾回收器是一種併發的三色標記清除回收器,這個想法最早是由 Dijkstra 在 1978 [1] 年提出的。Go 團隊一直在密切關注並改進 Go 語言的垃圾回收器。從每 50 毫秒一次的 10 毫秒 STW 暫停到每次 GC 有兩個 500μs 的 STW 暫停,整個改進過程可以在這裏 [2] 找到。長期從事 Go 開發,我一直對其性能感到畏懼,因此我決定深入 ⌘ Read more
Go1-20 arena 能手動管理內存了,怎麼用?**
大家好,我是煎魚。最近 Go1.20 中的手動管理內存受到了很多人的關注。衆所周知,Go 是一門帶垃圾回收(GC)的編程語言,可以進行自動的內存申請、釋放等內存操作。帶 GC 能簡化編程時的心智成本,也保證了內存的安全。我們說 “一般”,也就是有例外。人們說六個,一般都有七個。Go 的例外就出現了。Go1.20 arena------------新版本 Go1.20,基於 Google 自身的需求 ⌘ Read more
【譯】Go 語言:深入探究 array 與 slice
你好,我是小四,你情商高,也可以叫我四哥~這篇文章我們將討論 Go 語言中數組與切片 (slice),深入探究它們的內部結構以及爲什麼它們表現不一樣,即使它們能做類似的事情。我們將從以下幾個方面討論數組和切片的表現差異:默認值和零值 聲明和初始化數組和切片 數組和切片的值部分 操作數組和切片 關於切片的潛在陷阱 代碼優化的小技巧 默認值和零值Go 語言中,聲明變 ⌘ Read more
「每週譯 Go」在 Go 中定義方法**
簡介------函數 (點擊可跳轉查看)允許你將邏輯組織成可重複的程序,每次運行時可以使用不同的參數。在定義函數的過程中,你常常會發現,可能會有多個函數每次對同一塊數據進行操作。Go 可以識別這種模式,並允許您定義特殊的函數,稱爲方法,其目的是對某些特定類型(稱爲接收器)的實例進行操作。將方法添加到類型中,不僅可以傳達數據是什麼,還可以傳達如何使用這些數據。定義一個方法----------定義一 ⌘ Read more
「Go 框架」深入理解 iris 中的 mvc 之原理篇**
一、mvc 的基本使用-----------在 iris 中,還封裝了 mvc 包,該包可以讓開發者快速的搭建出基於 mvc(model-view-controller)分層的業務系統。其基本使用如下:package mainimport ( "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" "github.co ⌘ Read more
Ristretto 簡介:一個高性能 GO 緩存**
這個博客登上了 Golang subreddit[1] 的頂部,並且在 Hacker News[2] 的 trending 上排在前十位。一定要在那裏參與討論,並通過給我們一個 star[3],表達對我們的喜歡。經過六個月的研發,我們自豪地宣佈緩存 Ristretto[4]:一個高性能、併發、可設置內存上限的 Go 緩存的初始版本。他是抗爭用、擴展性好、提供穩定的高命中率。前言這一切都始於 Dgr ⌘ Read more
寫給 go 開發者的 gRPC 教程 - 錯誤處理**
基本錯誤處理首先回顧下 pb 文件和生成出來的 client 與 server 端的接口service OrderManagement { rpc getOrder(google.protobuf.StringValue) returns (Order);}type OrderManagementClient interface { GetOrder(ctx context.Context, ⌘ Read more
Go1-20 實驗:內存 Arenas VS 傳統內存管理**
注意 Go arenas 是一個實驗性功能。API 和實現完全不受支持,Go 團隊不保證兼容性,也不保證在任何未來版本中繼續存在。 請通過這個 github 討論區 [1] 來了解更多信息。簡介------Go 1.20 引入了一個實驗性的內存管理概念 “arenas”,可以用來提高 Go 程序的性能。在本博客文章中,我們將探討:什麼是 arenas 它們是如何工作的 ⌘ Read more
golang 中 channel 的詳細使用、使用注意事項及死鎖分析**
什麼是 channel 管道--------------它是一個數據管道,可以往裏面寫數據,從裏面讀數據。channel 是 goroutine 之間數據通信橋樑,而且是線程安全的。channel 遵循先進先出原則。寫入,讀出數據都會加鎖。channel 可以分爲 3 種類型:只讀 channel,單向 channel 只寫 channel,單向 channel 可讀可寫 channe ⌘ Read more
如何使用 Delve 和 eBPF 更快地調試 Go 程序**
前言此文章將解釋如何使用 Delve[1] 跟蹤 Go 程序,以及 Delve 如何利用 eBPF 在後臺優化效率和速度。Delve 的目標是爲開發人員提供愉快且高效的 Go 調試體驗。因此,本文重點介紹了我們如何優化函數跟蹤子系統,以便您可以更快地檢查程序並找到根本原因分析。Delve 的跟蹤實現有兩個不同的後端,一個是基於 ptrace 的,另一個使用 eBPF。如果您不熟悉任何這些術語,請不 ⌘ Read more
寫給 go 開發者的 gRPC 教程 - 攔截器**
gRPC的攔截器和其他框架的攔截器(也稱 middleware)作用是一樣的。利用攔截器我們可以在不侵入業務邏輯的前提下修改或者記錄服務端或客戶端的請求與響應,利用攔截器我們可以實現諸如日誌記錄、權限認證、限流等諸多功能上一篇提到gRPC的通信模式分爲unary和streaming幾種模式,攔截器也分爲兩種:unary interceptors和streaming interceptors ,兩 ⌘ Read more
必須知道的 17 個 Go 開發庫**
包含各種使用場景的 Go 第三方列表。隨着時間的推移,Go 語言愛好者已經創建並共享了許多 Go 框架和庫。這些庫有不同的功能,從微服務開發到構建 web 應用程序!備註:在 Go 語言中我們都稱第三方庫爲 package(包)。配置文件處理庫配置文件通常以各種格式編寫,如 JSON 和 YAML。Go 有一個非常有用的包,它使讀取和寫入各種格式的配置文件成爲小菜一碟。1、Viper:這是一個關於 ⌘ Read more
Go 語言標準庫 net-http 及 go-resty 庫使用**
net/http 介紹Go 語言標準庫 net/http 自身足夠簡單且性能優越,Go 語言的很多 web 框架號稱多麼優秀,都是基於強大的 net/http 庫提供了可擴展性的功能,例如:靜態路由、安全和用戶認證、實時通信等。net/http 庫提供了 http 客戶端和服務端的實現,下面我們通過簡單案例來嘗試下。HTTP 服務端基於 net/ http 實現服務端的用法,通過調用 Listen ⌘ Read more
在 Go 中實施簡潔架構**
已經有很多關於 簡潔架構 [1] 的文章了。它的主要價值在於能夠維護無副作用的領域層,使我們能夠不需要利用沉重的 mock 來測試核心業務邏輯。 通過寫一個無需依賴的核心領域邏輯,以及外部適配器 (成爲它的數據庫存儲或者 API 層) 來實現的。這些適配器依賴於領域,而不是領域依賴適配器。在這篇文章,我們會看一下簡潔架構是如何實現一個簡單的 Go 項目。我們會提及一些額外的主題,例如容器化以及用 ⌘ Read more
「每週譯 Go」在 Go 中定義結構體**
簡介------圍繞具體的細節建立抽象,是編程語言能給開發者的最大工具。結構體使我們可以談論 Address 而不是通過描述 Street, City, 或 PostalCode 字符串來進行推斷。它們作爲文檔(點擊跳轉查看哦)的一個自然紐帶,致力於告訴未來的開發者(包括我們自己)哪些數據對我們的 Go 程序是重要的,以及未來的代碼應該如何正確使用這些數據。結構體可以用幾種不同的方式來定義和使用 ⌘ Read more
Go 語言怎麼使用 zap 日誌庫?**
大家好,我是 frank。 歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。 設爲星標,第一時間接收推送文章。 文末掃碼,加羣一起學 Golang 語言。01 介紹我們在之前的文章中介紹過標準庫 log 包的使用方式,它雖然使用方便,但是它支持的功能比較簡單。本文我們介紹 uber 開源的日誌庫 zap,首先使用 Gin 框架構建一個 Web 應用,然後通 ⌘ Read more
縮減 Golang 編譯後文件大小的三種方法**
測試機器:Mac OS 10.15 Golang 版本:1.15.2 爲什麼要縮減 Golang 編譯後的文件大小呢?不縮減可不可以呢。正常來說一般服務器硬盤資源相對來說都比較充足,但如果類似樹莓派上的一些設備上,硬盤資源相對來說就不是那麼充足,這時就需要我們斤斤計較文件大小了。首先,我們先對比一下兩段 Hello World 代碼package mainimport "fmtfunc ⌘ Read more
怎麼把自己造的輪子發佈到 Go Module 上**
我們在開發 Go 項目時,經常會使用到一些外部依賴包。它們一般都是通過形如go get example.com/xxx的命令形式獲取到本地使用。本着開源精神,如果我們想將自己開發的包共享出去,讓其他人也能使用go get命令獲取到它們,應該如何做呢?本文將以開源至 Github 平臺爲例,展示其流程。建立倉庫----首先,在 github 平臺建立倉庫,設置想要開源的 Go 庫名。這裏將項目名取爲 ⌘ Read more
巧用 Golang 泛型,簡化代碼編寫**
作者 \\| 百度小程序團隊導讀 本文整理了很多的泛型應用技巧,結合具體的實際代碼示例,特別是很多直接對 Go 語言內置的類庫的實現進行改造,再通過兩者在使用上直觀對比,幫助大家對泛型使用思考上提供了更多思路,定會幫助大家在應用泛型能力上有很多的提升與啓發。01前言泛型功能是 Go 語言在 1.18 版本引入的功能,可以說是 Go 語言開源以來最大的語法特性變化,其改動和影響都很大, 所以整個版本的開 ⌘ Read more
「Go 框架」深入理解 web 框架的中間件運行機制**
大家在使用 iris 框架搭建 web 系統時,一定會用到中間件。那麼你瞭解中間件的運行機制嗎?你知道爲什麼在 iris 和 gin 框架的請求處理函數中要加 c.Next() 函數嗎?本文就和大家一起探究該問題的答案。一、中間件的基本使用----------在 web 開發中,中間件起着很重要的作用。比如,身份驗證、權限認證、日誌記錄等。以下就是各框架對中間件的基本使用。1.1 iris 框架中 ⌘ Read more
這些關於 Golang timezone 時區的坑, 我已經幫你踩過了**
原文鏈接: https://tangx.in/posts/2023/01/09/golang-timezone-issue/Golang 中一些不太注意的時區問題time/tzdata 庫------------------Golang 內置的一個時區文件。可以在程序中任意位置被導入。導入後, 如果程序 找不到本地 時區文件, 就會使用該庫的數據。 本地 指的是 運行環境, 可能是實際的 ⌘ Read more
Go 語言實現的可讀性更高的併發神庫 conc
前言\\-\\- 哈嘍,大家好,我是 asong;前幾天逛 github 發現了一個有趣的併發庫 - conc,其目標是: 更難出現 goroutine 泄漏 處理 panic 更友好 併發代碼可讀性高 從簡介上看主要封裝功能如下: 對waitGroup進行封裝,避免了產生大量重複代碼,並且也封裝 recover,安全性更高 提供panics.Catcher封裝r ⌘ Read more
用構建標籤定製 Go 二進制文件**
簡介--在 Go 中,構建標籤 或 構建約束 是添加到一段代碼中的標識符,它決定了該文件在 build 過程中何時應被包含在一個包中。這允許你從同一源代碼中構建不同版本的 Go 應用程序,並以快速和有組織的方式在它們之間進行切換。許多開發者使用構建標籤來改善構建跨平臺兼容的應用程序的工作流程,例如需要修改代碼以考慮不同操作系統之間的差異的程序。構建標籤還可用於集成測試 [1],允許你在集成代碼和帶 ⌘ Read more
聊聊併發庫 conc
上個月 sourcegraph 放出了 conc[1] 併發庫,目標是 better structured concurrency for go, 簡單的評價一下每個公司都有類似的輪子,與以往的庫比起來,多了泛型,代碼寫起來更優雅,不需要 interface, 不需要運行時 assert, 性能肯定更好我們在寫通用庫和框架的時候,都有一個原則,併發控制與業務邏輯分離,背離這個原則肯定做不出通用庫整 ⌘ Read more
「Go 進階」如何優雅接入多個遠程配置中心?**
本文基於 viper 實現了 apollo 多實例快速接入,授人以漁,帶着大家讀源碼,詳解實現思路,封裝成自己的工具類並且開源。 前言--viper 是適用於 go 應用程序的配置解決方案,這款配置管理神器,支持多種類型、開箱即用、極易上手。本地配置文件的接入能很快速的完成,那麼對於遠程 apollo 配置中心的接入,是否也能很快速完成呢?如果有多個 apollo 實例都需要接入,是否能支持 ⌘ Read more
「Go 框架」剖析 iris 中錯誤碼路由的運行機制**
大家好,我是漁夫子。本號新推出「Go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。同時瞭解其底層的實現原理,以便更深入地瞭解 Go 語言。在 iris 中,除了能夠指定正常的請求路由外,還能根據 http 的響應錯誤碼指定具體的請求處理函數,以便針對具體的錯誤做出不同的響應。例如,當響應狀態碼是 400 時,該如何處理該請求;當響應狀態碼是 500 時,又該如何處理該請 ⌘ Read more
10 秒改 struct 性能直接提升 15-,產品姐姐都誇我好棒**
struct 結構體的字段順序有什麼講究?您可能不知道,通過簡單地重新排序結構體中的字段,可以極大地提高 Go 程序的速度和內存使用率!難以置信吧?讓我們來看個例子。例子--ep:type BadStruct struct {    age          uint8    IdCardNumber uint64    DateOfBirth  uint16}type GoodStruct st ⌘ Read more
「Go 框架」深入理解 iris 框架的路由底層結構**
大家好,我是漁夫子。本號新推出「Go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。同時瞭解其底層的實現原理,以便更深入地瞭解 Go 語言。iris 框架號稱是最快的 web 框架。今天就來深入研究下 iris 框架路由的底層實現原理。那爲什麼需要深入瞭解 web 框架的路由呢?路由是 web 框架的核心。在業務開發中,我們在使用框架時,基本就是在註冊路由、使用中間件、然 ⌘ Read more
瞭解 Go 中的 init
簡介------在 Go 中,預定義的 init() 函數設置了一段代碼,在你的包的任何其他部分之前運行。這段代碼將在包被導入(點擊跳轉查看)後立即執行,當你需要你的應用程序在一個特定的狀態下初始化時,例如你有一個特定的配置或一組資源,你的應用程序需要用它來啓動。它也可以在導入副作用時使用,這是一種通過導入特定包來設置程序狀態的技術,經常被用於 register 一個包和另一個包,以確保程序考慮 ⌘ Read more
Go 底層探索 -一-: 編譯器**
介紹\\-\\-\\-\\-\\- @注: 以下內容來自本人學習《Go 語言底層原理剖析》書中的摘要信息。另外這本書中使用的Go是老版本,我使用的版本是Go1.18有時候源碼路徑可能會不一樣編譯器是一個大型且複雜的系統,一個好的編譯器會很好地結合形式語言理論、算法、人工智能、系統設計、計算機體系結構及編程語言理論。Go語言的編譯器遵循了主流編譯器採用的經典策略及相似的處理流程和優化規則(例如經典的遞歸下降的語法解析 ⌘ Read more
聊聊 Go 與 TLS 1-3
除了一些綜述類文章和譯文,我的文章選題多來源於實際工作和學習中遇到的問題。這次我們來聊聊近期遇到一個問題:如何加快基於 TLS 安全通信的海量連接的建連速度?TLS(Transport Layer Security) 傳輸安全層的下面是 TCP 層,我們首先可能會想到的是優化內核有關 TCP 握手的相關參數來快速建立 TCP 連接,比如:net.ipv4.tcpmaxsynbacklog n ⌘ Read more
發現 conc 併發庫一個有趣的問題**
圖片拍攝於 2022 年 02 月 04 日 衢州開化老家 下週回家了上週看到一個新庫 conc, better structured concurrency for go.這個庫的目標是:更難出現 goroutine 泄漏 優雅處理 panic 使併發的代碼更易讀 我們一條條細說。Make it harder to leak goroutinesgoroutine 泄漏還是很 ⌘ Read more
Golang vs Rust 服務端編程應該選擇哪種語言**
爲服務端編程選擇一種語言應該基於你的長期目標和項目的要求,因此,盲目地問我應該僱用 Go 開發人員還是應該選擇 Rust 進行開發並不能幫助你解決問題。然而,如果你發現自己陷入了困境,那麼這篇文章將爲你解惑。下面讓我們開始吧。Go 是一種靜態類型的、AOT 編譯的語言,而 Rust 是一種靜態、強類型與 AOT 編譯的語言,也是一種多範式、高級和通用的語言。讓我們從多方位來評估這兩種語言。1. G ⌘ Read more
瞭解 Go 中的 defer
簡介------Go 有許多其他編程語言中常見的控制流關鍵字,如 if、switch、for 等。有一個關鍵詞在大多數其他編程語言中都沒有,那就是  defer ,雖然它不太常見,但你很快就會發現它在你的程序中是多麼有用。defer 語句的主要用途之一是清理資源,如打開的文件、網絡連接和 數據庫句柄 [1]。當你的程序使用完這些資源後,關閉它們很重要,以避免耗盡程序的限制,並允許其他程序訪問這些 ⌘ Read more
一文讀懂 Go Http Server 原理**
hello 大家好呀,我是小樓,這是系列文《Go 底層原理剖析》的第二篇,依舊是分析 Http 模塊,話不多說,開始。從一個 Demo 入手俗話說萬事開頭難,但用 Go 實現一個 Http Server 真不難,簡單到什麼程度?起一個 Server,並且能響應請求,算上包名、導入的依賴,甚至空行,也就只要 15 行代碼:package mainimport ( "io" "net/http")fu ⌘ Read more
evio 原理解析**
圖片拍攝於2022年11月26日 大屋頂之前分析過go自帶的netpoll,以及自建的網絡框架gnet。這類框架還有:evio、gev、nbio、cloudwego/netpoll(字節的)爲什麼會出現這麼多自建框架? 我覺得逃不過三點,自帶的 netpoll 滿足不了一些特殊場景。 其他實現設計存在侷限性,存在優化空間。 程序員都喜歡自己造輪子。 另外,這類框架都是基於 sy ⌘ Read more
Go1-20 新特性:context 支持自定義取消原因**
問題熟悉 Go 語言的同學都知道,context 包只對外提供了兩種取消原因 context.DeadlineExceeded 和 context.Canceled,不支持自定義原因,就像下面這樣:func main() {    // Pass a context with a timeout to tell a blocking function that it    // should ab ⌘ Read more
最全 Go select 底層原理,一文學透高頻用法**
導語 \\| 在日常開發中,select 語句被高頻使用。但目前,全網分析 select 在編譯期和運行時的完整底層原理資料,非常匱乏。本文基於 Go1.18.1 版本的源碼,講解 select 訪問 Channel 在編譯期和運行時的底層原理——select 編譯器優化用到的 src/cmd/compile/internal/walk/select.go 的 walkSelectCases() 函數 ⌘ Read more
詳解全網最快 Go 泛型跳錶【內附源碼】**
導讀 \\| 今年開發者期盼已久的、泛型的 go1.18 發佈了,但目前基於泛型的容器實現案例很稀缺。騰訊後臺開發工程師陳峯實現了一套類似 C++ 中 STL 的容器和算法庫。其中有序的 Map 用跳錶實現,並優化到極致性能。本文作者將分享優化的思路並公開源碼,供各位開發者參考。 背景 最近一年我們用 Go 語言實現的業務系統至少 70%,因此我們 Review 了大量的 Go 代碼,也看了很多相 ⌘ Read more
Cobra 眼睛蛇 - 強大的 Golang CLI 框架**
閱讀過 k8s 源碼的同學,應該都知道k8s Scheduler、kubeadm、kubelet等核心組件的命令行交互全都是通過 spf13 寫的Cobra庫來實現。本文就來介紹下 Cobra 的相關概念及具體用法。(內容譯自官方文檔)Cobra logo關於--Cobra 是一個用於 Go 的 CLI 框架。它包含一個用於創建 CLI 應用程序的庫和一個快速生成 Cobra 程序和命令文件的工具 ⌘ Read more
通過分析 gin、beego 源碼,讀懂 web 框架對 http 請求處理流程的本質**
大家好,我是漁夫子。本號新推出「Go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。同時瞭解其底層的實現原理,以便更深入地瞭解 Go 語言。在實際工作中,大家一定會用到 go 的 web 框架。那麼,你知道各框架是如何處理 http 請求的嗎?今天就主流的 web 框架gin、beego框架以及 go 標準庫net/http來總結一下 http 請求的流程。一、標準庫 n ⌘ Read more
Go 變量遮蔽導致的意外錯誤**
今天要介紹的第一個易犯錯誤就是,變量作用域導致的。變量的作用域是指變量可以被引用的範圍。換句話說,是應用程序中變量名綁定有效的部分。在 Go 語言中,在代碼塊中聲明的變量名可以在內部代碼塊中重新聲明。這個原理被稱爲變量遮蔽,容易犯常見錯誤。下面的示例顯示了由於變量遮蔽而產生的意外副作用。它以兩種不同的方式創建 HTTP 客戶端,這取決於 tracing 的值:var client http.Cli ⌘ Read more
3 分鐘帶你通過 Go 生成宣傳海報!**
對於公網應用來說,海報功能是非常非常重要的,它不僅能擴大應用的知名度,還能起到營銷的作用。那從技術上講,海報該怎麼去做呢?大部分應用都會選擇前端渲染,比如 canvas 渲染,這是最常見的。當然也有一些應用選擇後端生成,兩者各有各的好處,也有各自的缺點。這裏我們不去討論前端怎麼渲染,只講後端怎麼生成。先來看下我們將要完成的效果,這是沒有加文字和二維碼的圖片:這是加上我們的二維碼和漢字的樣子:因爲微 ⌘ Read more
講一個故事說明使用匯編語言的必要性**
\\- 1 -有一天,有一個程序員叫做 Bob,他寫了一個用 Go 語言實現的階乘函數。但是,當數據規模變大時,運行速度非常慢。於是,他的老闆讓他改成用匯編語言實現。Bob 很不情願,但還是學習了彙編語言,並寫出了一個能跑得飛快的階乘函數。最後,Bob 成爲了一名出色的彙編程序員,並因爲他的階乘函數而獲得了巨大的成功。他明白,彙編語言可以讓他的程序更快、更簡潔。所以,如果你想寫出高效、簡潔的程序,就要 ⌘ Read more
Go 框架 Gin 怎麼實現允許前端跨域請求?**
大家好,我是 frank。 歡迎大家關注「Golang 語言開發棧」公衆號。 01 介紹 在前後端分離的項目中,前端在請求服務端提供的接口時,往往會遇到跨域請求的問題,服務端可以通過 CORS 的方式解決,限於篇幅,關於跨域和 CORS 的詳細介紹,讀者朋友們可以自行查閱相關資料。Go 框架 Gin 官方提供了 CORS 中間件,可以很方便地實現使用 CORS 解決跨域問題,本文我們介 ⌘ Read more
Go 學設計模式 -- 怕把核心代碼改亂,記得用代理模式**
大家好,這裏是每週都陪你進步的網管~其實也不是每週啦,上週陽了~實在是進步不動了...... 這周咱們繼續之前擱置了一段時間的設計模式系列。上一次咱們分享的是職責鏈模式,在文章最後提到了一下裝飾器模式,兩者雖然結構上類似但在用途上還是有區別的,而裝飾器模式本身算是代理模式的一個特殊應用,所以這篇文章我們就先來學習一下代理模式的構成和用法,後面再來學習裝飾器。老看我文章的同學可能發現了,雖然教材上是 ⌘ Read more
Go 開發常用操作技巧 --channel
在 Go 語言中,提倡使用通信來共享內存,而不是通過共享內存來通信,這裏的通信就是通過 channel 發送接收消息的方式進行數據傳遞,而不是通過修改同一個變量。所以在數據流動、傳遞的場景中要考慮優先使用 channel,它是併發安全的,性能也不錯。channel 聲明ch := make(chan string)使用 make 函數 chan 是關鍵字,表示 channel 類型,chan ⌘ Read more=
Go 開發常用操作技巧 -- 模塊管理**
Go 依賴管理經歷了 3 個階段,GOPATH、Go Vendor、Go Module。GOPATH GOPATH 是 Go 語言的一個環境變量,它是 Go 項目的工作區。目錄有 3 個結構:bin:項目編譯的二進制文件 pkg:項目編譯生成的 lib 包 src:項目源碼 go get 會下載最新版本的包到 src 目錄下。因爲 src 下只能允許一個版本的存在,所以對於 ⌘ Read more
Go 開發常用操作技巧 -- 結構體**
結構體是由一系列相同或不相同類型數據組成的數據集合。 結構體的成員(字段)的特性:字段名必須唯一 字段有自己的類型和值 字段的類型也可以是結構體,甚至是字段所在結構體的類型 結構體定義格式如下:type 類型名 struct{  字段1 類型1  字段2 類型2  //...}結構體初始化type Mystruct struct { Name    string Address ⌘ Read more
Context 超時處理應該這麼做**
1、超時處理有問題代碼-----------只通過 select 監聽超時信號,沒有處理正常邏輯處理。package mainimport ( "context" "fmt" "sync" "time")var wg sync.WaitGroupfunc main() { // 定義一個3s超時context 所有衍生出來的goroutine必須在3s內完成 否則會cancel掉 ctx, can ⌘ Read more
一文讀懂主流 web 框架中路由的實現原理**
一、什麼是路由-------路由,就是 url 地址到業務處理代碼的映射。當用戶輸入一個 url 地址時,服務器該知道該用戶返回什麼內容。比如,當用戶點擊登錄時,服務器應該做登錄相關的事情,並給用戶返回登錄成功或失敗的頁面。當用戶點擊退出時,服務器應該做和退出相關的事情(比如清理用戶登錄的數據),並返回給用戶退出之後的頁面。一個 url 到一個具體的處理函數之間的映射叫做一條路由。多條路由組成路由 ⌘ Read more
一起用 Go 做一個小遊戲(中)**
限制飛船的活動範圍---------上一篇文章還留了個尾巴,細心的同學應該發現了:飛船可以移動出屏幕!!!現在我們就來限制一下飛船的移動範圍。我們規定飛船可以左右超過半個身位,如下圖所示:很容易計算得出,左邊位置的 x 座標爲:x = -W2/2右邊位置的座標爲:x = W1 - W2/2修改 input.go 的代碼如下:func (i Input) Update(ship Ship, cfg ⌘ Read more
Go:如何使用 Google Translate 翻譯文本**
你有沒有想過如何開發自己的翻譯器?或者你是否遇到過需要開發文本翻譯功能的需求?那麼本文關於 Golang 如何使用谷歌翻譯 API 翻譯文本的教程就是爲你準備的!讓我們來看看今天的教程都講了些什麼。RapidAPI 的理解和實現 創建 API 和用戶接口 實現服務端文本翻譯邏輯 初始化配置先初始化一個 Go 項目:在本地創建 "google-translate 文件夾,在這個文件 ⌘ Read more
Go 開發常用操作技巧 --map
map 是一種特殊的數據類型,它是一種元素對的「無序」集合,元素對爲 鍵 (key) 值(value) 形式。我們可以通過 key 來快速找到與之對應的 value。map 是引用類型,聲明方式: var name map[keytype]valuetype,name 爲 map 的變量名,keytype 爲鍵類型,valuetype 爲鍵對應的值類型。聲明時可以不需要指定 map 的長度,因爲 ⌘ Read more
Go 開發常用操作技巧 -- 數組**
在 go 語言中,數組的長度是不可變的,這就導致數組在實際使用中不是很靈活,爲此,設計了動態數組 --Slice(切片)。切片是對數組的一個連續片段的引用,所以切片是一個引用類型。其內部結構包含地址、大小和容量。切片的創建有以下四種方式:make([]Type,length,capacity) make([]Type,length) []Type{} []Type{value1, ⌘ Read more
當 go-sql-driver 遇到 mysql timestamp 的離奇 bug
hi,大家好,我是 haohongfan。對於 Go CURD Boy 來說,github.com/go-sql-driver/mysql 這個庫都不會陌生。或許有些人可能沒太留意,直接就複製粘貼了 import。比如我們使用 gorm 的時候,如果不加 "github.com/go-sql-driver/mysql" 的話,就會報:panic: sql: unknown driver "mys ⌘ Read more
Go 實現後臺任務調度系統**
一、背景----平常我們在開發 API 的時候,前端傳遞過來的大批數據需要經過後端處理,如果後端處理的速度快,前端響應就快,反之則很慢,影響用戶體驗。針對這種場景我們一般都是後臺異步處理,不需要前端等待所有的都執行完才返回。爲了解決這一問題,需要我們自己實現後臺任務調度系統。二、任務調度器實現---------poll.gopackage pollerimport ( "context" "fmt ⌘ Read more
最好的 Go 框架:沒有框架?**
作爲 Go 語言的團隊領導者這幾年時間,我從初學者那裏聽到的最常見問題是 “我應該使用什麼框架?”。我的想法是使用過去的語言經驗去編寫 Go 程序往往會讓結果變得非常糟糕。其他的編程語言已經建立了 “默認” 的框架。Java 有 Spring,Python 有 Django 和 Flask,Ruby 有 Rails,C# 有 ASP.NET,Node 有 Express,PHP 有 Symfony ⌘ Read more
Go 版本大於 1-13,程序裏這樣做錯誤處理才地道**
大家好,這裏是每週都在陪你進步的網管。之前寫過幾篇關於 Go 錯誤處理的文章,發現文章裏不少知識點都有點落伍了,比如 Go 在 1.13 後對錯誤處理增加了一些支持,最大的變化就是支持了錯誤包裝(Error Wrapping),以前想要在調用鏈路的函數里包裝錯誤都是用"github.com/pkg/errors"這個庫。Go 在 2019 年發佈的Go1.13版本也採納了錯誤包裝,並且還提供了幾個 ⌘ Read more
如何在 Go 中構造 for 循環**
介紹------在計算機編程中,循環 是在滿足某些條件之前循環重複執行一段代碼的代碼結構。在計算機編程中使用循環可以讓您自動並重復地執行類似的任務。想象一下,如果您有一個需要處理的文件列表,或者您想計算一篇文章的行數。您就可以在代碼中使用循環來解決這樣的問題。在 Go 中,for 循環是基於循環計數器或循環變量實現代碼的重複執行。與其他具有多個循環結構(例如 while , do 等 )的編程語 ⌘ Read more
Go1-20 新特性:切片轉數組**
你好,我是小四,你情商高,也可以叫我四哥~Go1.20 正式版本還沒有發佈,官方計劃 2023 年 2 月份發佈。不過,Go1.20rc 已經在 12 月 8 號發佈了,一起來嚐鮮。語言特性方面主要有四個優化,其中最主要的添加了 切片轉數組 功能。其實在 Go1.17 版本,Go 語言已經有 切片轉數組指針 的功能。可以看 P 神的這篇文章 [1],瞭解下詳情。引入 切片轉數組指針 特性之後,br ⌘ Read more
golang 實現 Pub-Sub 模式**
一、什麼是 Pub/Sub 模式----------------Pub/Sub 是一種可擴縮的異步消息傳遞服務,可將生成消息的服務與處理這些消息的服務分離開來。Pub/Sub 允許服務異步通信,延遲時間大約爲 100 毫秒。Pub/Sub 用於流式分析和數據集成流水線,以注入和分發數據。無論是作爲用於消息整合的消息傳遞中間件,還是作爲並行處理任務的隊列,它都非常有效。通過 Pub/Sub,可以創建 ⌘ Read more
使用 Go 和 C 進行 CUDA 編程**
關於 CUDA-------NVIDIA 和 AMD 等圖形芯片製造商的圖形處理器 (GPU) 銷量一直在飆升,這主要歸功於加密貨幣礦工和機器學習應用程序,它們在遊戲和模擬之外發現了這些圖形處理器的用途。這主要是因爲 GPU 提供了通用處理器所沒有的並行能力,而這些能力恰好非常適合大規模哈希和矩陣計算等操作,這些操作是挖掘和機器學習工作負載的基礎。NVIDIA 的 CUDA 爲可用於數值計算的圖形 ⌘ Read more
Go 爲什麼能成功**
大家在入門 Go 語言時,多埋頭於 Go 語法,忙於練手或快速完成公司的項目,無暇思考。但當大家到了要進階,要衝刺高級階段的時候,我建議你不能再稀裏糊塗了。既然入了 Go 這個坑,在進入高級階段前,我們最好在門口的 “影壁牆” 前駐留一下。仔細思考一下我們投入這麼多精力研究的 Go 爲什麼能成功,後續還能否持續成功下去。你要有自己的基本的判斷,自我暗示也好,堅定信心也罷,我們要爲繼續攀登 Go 高 ⌘ Read more
一起用 Go 做一個小遊戲(下)**
打包資源----使用 file2byteslice 包我們可以將圖片和 config.json 文件打包進二進制程序中,之後編譯生成一個二進制程序。然後拷貝這一個文件即可,不用再拷貝圖片和其他配置文件了。golang 有很多第三方包可以將打包資源,原理其實很簡單——讀取資源文件的內容,然後生成一個 go 文件,在這個文件中創建一個變量保存這個文件的二進制內容。我們將使用 ebiten 作者編寫的 ⌘ Read more
一起用 Go 做一個小遊戲(上)**
引子--最近偶然看到一個 Go 語言庫,口號喊出 “一個超級簡單(dead simple)的 2D 遊戲引擎”,好奇點開了它的官網。官網上已經有很多可以在線體驗的小遊戲了(利用 WASM 技術)。例如曾經風靡一時的 2048:當然只要安裝了 Go,我們也鍵入下面的命令本地運行這個遊戲:$ go run -tags=example github.com/hajimehoshi/ebiten/v2/e ⌘ Read more
玩轉 Go 鏈路追蹤**
前言--鏈路追蹤是每個微服務架構下必備的利器,go-zero 當然早已經爲我們考慮好了,只需要在配置中添加配置即可使用。關於 go-zero 如何追蹤的原理追溯,之前已經有同學分享,這裏我就不再多說,如果有想了解的同學去 https://mp.weixin.qq.com/s/hJEWcWc3PnGfWfbPCHfM9g 這個鏈接看就好了。默認會在 api 的中間件與 rpc 的 intercept ⌘ Read more
Go 語言代碼風格規範 - 指南篇**
每門開發語言都會有其特有的風格規範(亦或指南),開發者遵循規範能帶來顯著收益,有效促進團隊協作、減少 bug 錯誤、降低維護成本等。Google 開源的 Google Style Guides (https://google.github.io/styleguide/)爲多種編程語言提供了風格規範,包括 C++、Java、Python、JavaScript 等。在 2022 年 11 月,Go 語 ⌘ Read more
「每週譯 Go」如何在 Go 中編寫 Switch 語句**
介紹--條件語句(點擊查看往期推文) 使程序員有能力指導他們的程序在某個條件爲真時採取某些行動,在條件爲假時採取另一種行動。經常,我們想把一些 變量 [1] 與多個可能的值進行比較,在每種情況下采取不同的行動。僅僅使用if語句 [2] 就可以做到這一點。然而,編寫軟件不僅是爲了讓事情順利進行,也是爲了向未來的自己和其他開發者傳達你的意圖。switch是一個替代性的條件語句,對於傳達你的 Go 程 ⌘ Read more
Go 開發常用操作技巧 -- 字符串**
Go 語言字符串的字節使用的是 UTF-8 編碼,是一種變長的編碼方式。使用 1~4 個字節表示一個符號,根據不同的符號而變化字節長度。含中文字符串截取字符串的長度 我們可以使用 len()函數來獲取字符串的長度,英文爲 1 個字節長度,中文爲 3 個字節長度。可以使用 變量[n]的方式來獲取第 n+1 個字節,返回的是對應的 Unicode 值。其中 n 的範圍是 [0,len(n)-1] ⌘ Read more
~
Go 服務自動收集線上問題現場**
前言--對於 pprof,相信熟悉 Go 語言的程序員基本都不陌生,一般線上的問題都是靠它可以快速定位。但是實際項目中,很多時候我們爲了性能都不會開啓它,但是出了問題又要靠它來分析。好在 go-zero 已經幫我們很好的集成進來了,我們只需要像開關一樣去開啓、關閉它即可,這樣我們就可以配合運維監控,當出現 cpu、內存等異常情況時候,自動開始開啓收集(比如大半夜你睡的正香的時候),那麼第二天可以通 ⌘ Read more
深入理解 golang 的互斥鎖**
在開始之前,我們需要知道鎖實現的幾種方式。信號量 操作系統中有 P 和 V 操作。P 操作是將信號量值減去 1,V 操作是將信號量值增加 1. 因此信號量的操作模式爲:初始化,給它一個非負整數值。 在程序試圖進入臨界區之前需要先運行 P 操作,然後會有兩種情況。 當信號量 S 減少到負值時,該過程將被阻止並且無法繼續。這個時候,進程會被阻塞。 當信號量 S 不爲負時,進程可以進入 ⌘ Read more
一款好用的 Go 調用鏈可視化工具**
在接手他人代碼或調研一些開源項目時,如果能夠理清其中的代碼調用鏈路,這將加速我們對實現的理解。本文介紹一款工具 go-callvis,它能夠將 Go 代碼的調用關係可視化出來,並提供了可交互式的 web 服務。go-callvis 使用-------------依賴Go 1.17+ Graphviz (可選,當工具指定了 -graphviz 時需要) 工具安裝go get -u git ⌘ Read more
「Go 工具箱」web 中的 session 管理,推薦使用 gorilla-sessions 包**
大家好,我是漁夫子。本號新推出「Go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。同時瞭解其底層的實現原理,以便更深入地瞭解 Go 語言。在 web 開發中,大家一定會使用到 session。在 go 的很多 web 框架中並沒有集成 session 管理的中間件。要想使用 session 功能,我推薦大家使用這個包:gorilla/sessions。以下是該包的基本情 ⌘ Read more
Golang GC 從原理到優化**
這篇文章與筆者之前所寫幾篇不同,是一篇綜述型的文章,將從 GC 理論、在 Golang 中的應用、以及如何去做優化,這三個角度逐次進行闡述,文章中對於一些技術點會引用到多篇文章,希望讀者也都能進行閱讀,這有助於更全面的瞭解 Golang GC。同時,特別鳴謝 @王德宇 同學對這篇文章的斧正,以及撰寫過程中的諸多幫助與解答。理論GC 和內存分配方式是強相關的兩個技術,因此在分析兩者的設計原理之時,要 ⌘ Read more
盤點那些 Go 的最佳應用場景**
大家好,我是程序員幽鬼。Golang 是一種在開發人員中越來越受歡迎的編程語言。它是一種編譯型語言,與 C/C++ 和 Java 有一些相似之處,與其他語言相比具有多種優勢。Golang 可用於廣泛的應用程序,例如 Web 開發、機器學習和系統編程。如果你正在尋找一種構建可擴展應用程序的有效方法,Golang 是一個很好的選擇。此外,它是開源的,這意味着有大量可用的庫可以幫助你使應用程序運行得更快 ⌘ Read more
Go: 一些關於時間和定時任務的庫**
避免重複發明輪子。如果有一些好用的庫,我們就直接使用就好了,沒必要做一些重複的工作,如果這些庫不能滿足需求,不妨提交 pull request 或者 clone 它們,提升它們,優化它們,當前前提是你得知道它們。這篇文章給大家介紹一些關於時間和類似 linux cron 功能的定時任務庫。jinzhu/now----------張金柱大佬除了給大家貢獻了 gorm 外,還寫了一些好用的 Go 庫, ⌘ Read more
「每週譯 Go」如何在 Go 中編寫條件語句**
介紹------條件性語句是每一種編程語言的組成部分。通過條件語句,我們可以讓代碼有時運行,有時不運行,這取決於當時程序的條件。當我們完全執行程序的每個語句時,我們並沒有要求程序評估特定的條件。通過使用條件語句,程序可以確定某些條件是否被滿足,然後被告知下一步該做什麼。讓我們來看看一些使用條件語句的例子。如果學生的考試成績超過 65%,報告她的成績通過;如果沒有,報告她的成績不合格。 如果 ⌘ Read more
使用 Asynq 實現 Go 異步任務處理**
1\\. 介紹-------Asynq 是一個 Go 庫,用於對任務進行排隊並與工作人員異步處理它們。它的工作原理:客戶端將任務放入隊列 服務器從隊列中拉出任務併爲每個任務啓動一個工作 goroutine 多個工作人員同時處理任務 倉庫鏈接:https://github.com/hibiken/asynq)2. 快速開始--------- 2.1 準備工作確保已安裝並運行了 redi ⌘ Read more
golang 源碼分析:http 代理和 https 代理**
首先還是上代碼:https://github.com/xiazemin/dnsproxy,然後我們思考幾個問題:我們使用 charles 抓包的時候使用的是 https 代理還是 http 代理?使用 charles 代理的時候爲什麼要裝 charles 的證書,有什麼作用?http 代理能代理 https 的請求麼?首先測試下: 1,https 代理 https 請求 % H ⌘ Read more
go channel 詳細介紹**
一、介紹----go 以高併發著稱,而支撐這個高併發的,goroutine 協程是主要原因之一。 goroutine 讓我們輕鬆實現異步,非阻塞。 但這種異步,也帶來的問題是執行順序的不確定性。 以及數據同步的問題。在這種情況下,go 官方引入了 channel 來通信,實現數據共享。channel是用於goroutine的數據通信 在這張圖上面,我們在主協程,總共開了 5 個 gorou ⌘ Read more
Go 如何從零編寫 ProtoBuf 插件**
go 精通 protobuf 連載五:如何從零編寫 ProtoBuf 插件 本期的主要內容將手把手教會大家,編寫 probuf 的 go 插件,以我自己編寫的一個生成結構圖的插件爲例子。項目位於 https://github.com/hisheng/protoc-gen-go-struct一、自定義 ProtoBuf 插件介紹-------------------我們常用的 go 支持 prot ⌘ Read more
Golang 微服務框架,kratos 與 hertz 對比**
早年,如果使用 go 來做微服務,可選框架只有go-zero、go-micro、go-kit等。但隨着 Golang 的發展,社區也湧現出了一些新型的微服務框架,國內公司也開源了不少微服務框架,本文就主要介紹下嗶哩嗶哩的kratos與字節跳動的hertz。hertz 與 kratos 介紹-----------------hertz簡介Hertz[həːts] 是一個 Golang 微服務 H ⌘ Read more
Go 語言手冊**
Golang 是一門非常棒的簡潔且快速的現代編程語言。它是編譯的、開源的、強類型的。Golang——也被稱爲 Go——由谷歌工程師創建,主要目標如下:讓他們的項目編譯(和運行)更快 要簡單,這樣人們可以在短時間內學會 要足夠底層,但也要避免過於關注底層 可移植(經過編譯的 Go 程序不需要其他文件的支持,就可以跨平臺運行,因此它們很輕易分發) 簡潔而枯燥、穩定、可預測,從而 ⌘ Read more
go byte 字節與 ascii 碼**
一、ascii 碼介紹----------- ascii 碼總有有 128 位,用來表示常用的字符。 在 go 語言中我們用 byte 一個 uint8 (0-255) 來展示 ascii 字符。 二、go 表示 ascii 碼 0-9-------------------1、表示 ascii 的 0-9 在 ascii 嗎中utWEQ1我們用 go 語言打印一下:import "test ⌘ Read more
Go 中的可尋址和不可尋址怎麼理解?**
大家好,我是明哥。 本專欄內容,已經上傳 github:https://github.com/iswbm/golang-interview請大家幫幫忙去點個小 ⭐⭐,在那裏我對題庫進行了分類整理。本篇問題:Go 中的可尋址和不可尋址怎麼理解?1. 什麼叫可尋址?------------可直接使用 & 操作符取地址的對象,就是可尋址的(Addressable)。比如下面這個例子func main( ⌘ Read more
零拷貝技術第二篇:Go 語言中的應用**
書接上回: 零拷貝技術第一篇:綜述 [1], 我們留了一個小尾巴,還沒有介紹 Go 語言中零拷貝技術的應用,那麼本文將帶你瞭解 Go 標準庫中零拷貝技術。Go 標準庫中的零拷貝-----------在 Go 標準庫中,也廣泛使用了零拷貝技術來提高性能。因爲零拷貝相關的技術很多都是通過系統調用提供的,所以在 Go 標準庫中,也封裝了這些系統調用,相關封裝的代碼可以在 internal/poll[2] ⌘ Read more
Go 中的 HTTP 資源泄漏之謎**
我喜歡排查泄露的問題。這是一個智力之謎,我總能在這個過程中學到新東西。這個謎就像你在電視上讀到或看的一樣:細節是猥瑣的,從不令人沮喪,最後,我們總能得到一個很好的合乎邏輯的解釋。這就是計算機的偉大之處:它們最終是可以預測的,所以我可以安全地扮演偵探角色,因爲我知道我總是能得到我的罪犯。如果你討厭推理小說或者只想學習參考,你可以跳到關鍵要點 (劇透警告,咄?)。泄露 Dogfood--------- ⌘ Read more
PGO 是啥,咋就讓 Go 更快更猛了?**
大家好,我是煎魚。Go1.20 即將發佈,近期很多大佬提到一個關鍵詞 PGO,說是有很大的提高,很猛... 稱其爲本迭代(Go1.20)最大的功能特色,這個餅讓我一愣一愣,不禁思考是什麼,咋就很快了。今天就由煎魚和大家一起學習這個新特性。快速瞭解----PGO 是什麼Profile-guided optimization (PGO),翻譯過來是使用配置文件引導的優化。也被稱爲:profile-di ⌘ Read more
go build 打包二進制執行文件與 用 docker 打包 -鏡像 image- 入門**
一、go 打包而進駐文件------------1、安裝 go 環境我們可以從官方 https://go.dev/dl 下載對應系統的 go 安裝文件。 我這裏是 mac 系統,x86 架構,所以我選擇了 安裝完成後執行一下 go version 輸出如下:go version go1.19.7 darwin/amd642、新建一個實驗目錄mkdir hello && cd hello ⌘ Read more
三種獲取 Go 項目根目錄的方式,讓你做架構,選哪種?**
大家好,這裏是每週都陪你進步的網管~在搭建項目中一般都會有確定項目根目錄的絕對路徑的需求,一旦有了根目錄的絕對路徑,就能以這個根目錄爲基準,設置靜態文件、配置文件所在的目錄,這樣做的好處是無論把項目部署到哪個目錄下,執行程序時都不會出現No such file or directory 這樣的錯誤。今天就總結一下在 Go 程序裏邊怎麼獲取項目的根目錄絕對路徑。在網上搜索怎麼獲取 Go 項目的根目錄 ⌘ Read more
「每週譯 Go」理解 Go 中包的可見性**
介紹------當創建一個《Go 中的包》(點擊跳轉查看往期推文)時,最終的目標通常是讓其他開發者可以使用這個包,無論是高階包還是整個程序。通過《導入包》(點擊跳轉查看往期推文),你的這段代碼可以作爲其他更復雜的工具的構建模塊。然而,只有某些包是可以導入的。這是由包的可見性決定的。這裏的 可見性 是指一個包或其他構造可以被引用的文件空間。例如,如果我們在一個函數中定義一個變量,那麼這個變量的可見 ⌘ Read more
golang 本地緩存選型及原理總結**
一、本地緩存需求\\-\\-\\-\\-\\-\\-\\-\\-需要較高讀寫性能 \\+ 命中率 支持按寫入時間過期 支持淘汰策略 需要解決 gc 問題,否則大量對象寫入會引起 stw 掃描標記時間過長,cpu 毛刺嚴重 二、本地緩存調研--------freecache:https://github.com/coocood/freecache bigcache:https://github.com/aRead more
使用反射操作 channel
今年教師節極客時間送給講師 4999 SVIP 卡,一直沒顧過來用,上週激活後在極客時間的衆多精品課和專欄中徜徉,收穫頗豐。尤其是在拜讀鳥窩老師的《Go 併發編程實戰課》[1] 後,get 到一個以前從未用過的 “技能點”:使用 reflect 操作 channel,這裏整理一下,把它分享給大家。1. channel 常規語法的 “限制”Go 語言實現了基於 CSP(Communicating S ⌘ Read more
「Go 工具箱」解析 http 中的 user-agent,就用這個包:user_agent**
大家好,我是漁夫子。「Go 學堂」新推出 “Go 工具箱” 系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。今天給大家推薦一個解析 HTTP 請求頭中 user-agent 字段的庫:useragent 。目前騰訊藍鯨智雲配置平臺都在用這個包。\\| useragent 小檔案 \\|\\| --- \\|\\| star \\| 734 \\| used by \\| 622 \\|\\| contributors \\| ⌘ Read more
揭祕 go 內存!**
本文推選自騰訊雲開發者社區 -【技思廣益 · 騰訊技術人原創集】專欄。該專欄是騰訊雲開發者社區爲騰訊技術人與廣泛開發者打造的分享交流窗口。欄目邀約騰訊技術人分享原創的技術積澱,與廣泛開發者互啓迪共成長。本文作者是騰訊後臺開發工程師邵珠光。在處理內存泄露的時候,想到了一種從內存中查看哪些對象的問題,於是就對實際跑着的程序內存進行了解析,通過可視化的方式有助於理解 go 的內存佈局和管理。基礎知識在本 ⌘ Read more
go 語言使用 xorm 讀取 mysql 小結**
一、介紹----xorm 是 go 語言的常用 orm 之一,用來操作數據庫。主要特性特性:支持根據數據庫自動生成 xorm 的結構體 支持 Struct 和數據庫表之間的靈活映射, 並支持自動同步 支持事務 支持使用 Id, In, Where, Limit, Join, Having, Table, Sql, Cols 等函數和結構體等方式作爲條件 支持查詢結果集導出 ⌘ Read more
實戰 goproxy 爲中國 steam 登錄加速**
前言------我們公司領沃雲電腦平臺的用戶總是抱怨 steam 登錄常常失敗,自從 steam 撤走了中國的 CM 服務器後,每到高峯期就是網絡連接失敗的重災區,增量了 N 多平臺的東西,這次終於有時間來收拾這個登錄的問題了。先抓個包,確定需要的加速----------------首先還是用了 fiddler 工具對 steam 平臺登陸時抓了個包,抓到了他登陸時必用的接口 api.steamp ⌘ Read more