Searching txt.sour.is

Twts matching #GO
Sort by: Newest, Oldest, Most Relevant

Go 語言的宕機恢復,如何防止程序奔潰
Recover 是一個 Go 語言的內建函數,可以讓進入宕機流程中的 goroutine 恢復過來,recover 僅在延遲函數 defer 中有效,在正常的執行過程中,調用 recover 會返回 nil 並且沒有其他任何效果,如果當前的 goroutine 陷入恐慌,調用 recover 可以捕獲到 panic 的輸入值,並且恢復正常的執行。通常來說,不應該對進入 panic 宕機的程序做任何 ⌘ Read more

⤋ Read More

Go 語言的雙向鏈表、list 操作和雙向循環鏈表- 這些誰認識?
雙向鏈表1)雙向鏈表的結構雙向鏈表結構中元素在內存中不是緊鄰空間,而是每個元素中存放上一個元素和後一個元素的地址第一個元素稱爲(頭)元素,前連接(前置指針域)爲 nil 最後一個元素稱爲 尾(foot)元素,後連接(後置指針域)尾 nil 雙向鏈表的優點在執行新增元素或刪除元素時效率高,獲取任意一個元素,可以方便的在這個元素前後插入元素 充分利用內存空間,實現內存靈活管理 ⌘ Read more

⤋ Read More

更強大的 Go 執行跟蹤能力
runtime/trace 包 1] 包含了一個強大的工具, 可用於理解和調試 Go 程序。該功能允許我們在一段時間內對每個 goroutine 的執行進行跟蹤。使用 go tool trace 命令 [2), 我們就可以可視化和探索這些跟蹤數據。跟蹤的魔力在於, 它可以輕鬆揭示程序中一些通過其他方式很難發現的問題。例如, 大量 goroutine 在同一個 channel 上阻塞導致的併發瓶頸, ⌘ Read more

⤋ Read More

I’m this close to making an Android app for managing a shopping list.

I just accidentally deleted the wrong list in the app that I’m currently using, and now there’s no way to get it back. Recreating it is a major pain, because typing on a phone sucks ass. Fuck.

Maybe I should just go back to using pen and paper …

⤋ Read More

使用 mapstructure 高效解析 Go 語言中的動態數據結構
在處理數據流(如 JSON、Gob 等)過程中,我們可能不知道底層數據的結構,這時mapstructure庫就能大顯身手了。這款 Go 語言庫可以將通用 map 值解碼爲 Go 本地結構,也可執行反向操作,並提供有用的錯誤處理功能。今天,我們就深入瞭解這個庫,並列舉一些豐富的示例來幫助你掌握它的使用方法。簡介–mapstructure是一款 Go 庫,允許開發者將map[string]inter ⌘ Read more

⤋ Read More

Go 錯誤處理:用 select-case 來解決這個歷史難題?
大家好,我是煎魚。日常看 Go 社區的一些新動態,發現大家對於錯誤處理的新提案是很積極。上次分享了一篇想要用 switch-case 來解決現狀的新提案,不少同學認爲不可行。沒想到 Go 社區的同學腦洞還是很大的,這幾天又整出來個 select-case 的新提案的方式來解決錯誤處理。今天基於此給大家分享一下社區裏的新腦洞。快速背景—-本節的背景主要是給不瞭解的同學拉通一下。如果已經知道的可以 ⌘ Read more

⤋ Read More

Go 中的高速數據包處理: 從 net-Dial 到 AF_XDP
推進 Go 的極限: 從 net.Dial 到系統調用、AFPACKET 和極速 AFXDP。數據包發送性能的基準測試。最近, 我編寫了一個 Go 程序, 向數百萬個 IP 地址發送 ICMP ping 消息 [1]。顯然, 我希望這個過程能儘可能快速高效地完成。因此, 這促使我研究各種與網絡棧交互和快速發送數據包的各種方法。這是一個有趣的旅程, 所以在本文中, 我將分享一些學習成果, 並記錄 ⌘ Read more

⤋ Read More

寶藏級 Go 語言開源項目——教你自己動手開發互聯網搜索引擎
DIYSearchEngine 是一個能夠高速採集海量互聯網數據的開源搜索引擎,採用 Go 語言開發。Github 地址: https://github.com/johnlui/DIYSearchEngine 運行方法 首先,給自己準備一杯咖啡。把本項目下載到本地 編譯:go build -o ese *.go 修改配置文件:cp .env.example .env,然後把裏面的 ⌘ Read more

⤋ Read More

4 秒處理 10 億行數據! Go 語言的 9 大代碼方案,一個比一個快
編譯 | 核子可樂、凌敏來自 | InfoQ2024 年開年,Java “十億行挑戰”(1BRC)火爆外網。該挑戰賽要求開發者編寫一個 Java 程序,從一個包含十億行信息的文本文件中檢索溫度測量值,並計算每個氣象站的最小、平均值和最高溫度。“十億行挑戰” 的目標是爲這項任務創建最快的實現,同時探索現代 Java 的優勢。這項挑戰聽起來很簡單。但十億行代碼實際是一項龐大的工程,如果以每個數字 3 ⌘ Read more

⤋ Read More

Go arena 民間庫來了,可以手動管理內存!
大家好,我是煎魚。上年我們有討論過關於 Go arena 手動管理內存的相關提案。一開始還高歌猛進,但沒想到後面由於嚴重的 API 問題(想把 arena 應用到其他的標準庫中,但會引入大問題):Go 核心團隊中途咕咕咕到現在,沒有新的推動和突破性進展,實屬尷尬。最近有社區的大佬有了新的動作,來自 Grafana 的 @Miguel Ángel Ortuño 開源了一個新的第三方庫 ortuman ⌘ Read more

⤋ Read More

slog 終極指南
在本文中,我們將探討 Go 中的結構化日誌記錄,並特別關注最近推出的 log/slog[1] 軟件包, 這個軟件包旨在爲 Go 帶來高性能、結構化和分級的日誌記錄標準庫。該軟件包起源於由 Jonathan Amsterdam 發起的 GitHub 討論 [2], 後來專門建立了一個提案 [3] 細化設計。一旦定稿,它在 Go v1.21 版本中發佈。在以下各節中,我將全面呈現 slog 的功能, ⌘ Read more

⤋ Read More

Go 爲什麼不支持從 main 包中導入函數?
大家好,我是煎魚。作爲一個維護過許多有一定歷史沉澱的 Go 項目的人,在歷史債務下和奇葩需求下,會遇到一些迫於業務需求的技術訴求。訴求上是希望引用多項目,會出現從 main 包(package)中導入相關函數的這種使用訴求。爲了將多 Go 工程合併到一個大單體中使用。問題案例—-具體的使用案例如下。我們有一個 Go 應用,目錄結構如下:demo1├── go.mod├── main.go└── ⌘ Read more

⤋ Read More

深入探究 Go log 標準庫
Go 語言標準庫中的 log 包設計簡潔明瞭,易於上手,可以輕鬆記錄程序運行時的信息、調試錯誤以及跟蹤代碼執行過程中的問題等。使用 log 包無需繁瑣的配置即可直接使用。本文旨在深入探究 log 包的使用和原理,幫助讀者更好地瞭解和掌握它。使用先來看一個 log 包的使用示例:package mainimport “log”func main() { log.Print(“Print”) ⌘ Read more

⤋ Read More

Go 併發編程 —— I-O 聚合優化(動畫講解)
背景提要在存儲系統中,在確保功能不受損的前提下,儘量的減少讀寫 I/O 的次數是優化的一個重要方向,也就是聚合 I/O 的場景。讀寫操作雖然都有聚合 I/O 的需求,但各自的重點和實現方法卻有所不同。接下來,我們將分別探討讀和寫請求的聚合優化方法。讀請求的聚合以讀操作中,緩存優化是一種常見的優化手段。具體做法是將讀取的數據存儲在內存中,並通過一個唯一的 Key 來索引這些數據。當讀請求來到時,如果 ⌘ Read more

⤋ Read More
In-reply-to » Question of the day: What configuration file formats do you all like and use?

Yeah, the lack of comments makes regular JSON not a good configuration format in my view. Also, putting all keys in quotes and the use of commas is annoying. The big upside is that’s in lots of standard libraries.

I think the appeal with YAML is that is has comments, is kind of easy to write and read and also provides unlimited nesting levels. But it has all its drawbacks, no question. Forbidding tabs, thousands of different string flavors, having so many boolean options (poor Norwegians) etc. I use it, but I don’t particularly enjoy it.

Among simple key value pairs, I like INI files, but with # for comments, not ;. I never used TOML, read up on it yesteray before writing this question, but it looks a bit weird and has some strange rules. I guess I have to give it a try one day.

And yes, as mentioned by several of you, it always depends on the complexity of the configuration at hand.

I’m developing something for the scouts at the moment with rather simple requirements on the config. Currently, there are just four settings. Even INI would be overkill with its section. I selected JSON for now, because that’s readily available with Go’s std lib. But I do not like it.

Btw. what’s your own config format, @xuu@txt.sour.is?

⤋ Read More

獲取請求 IP,nginx 配置方案,gin 框架,2024 版,go 語言
在使用 Gin 框架時,獲取用戶請求的真實 IP 地址涉及到多種情況,尤其在使用代理服務器(如 Nginx)時。本文將詳細介紹如何使用 Gin 自帶方法和其他方式獲取用戶 IP,以及在面對 Nginx 轉發時如何準確獲取客戶端 IP,同時討論與 IP 相關的安全問題及處理方法。第一章:概述——1.1 獲取用戶真實 IP 的重要性獲取用戶的真實 IP 地址是許多應用中必不可少的功能,用於識別 ⌘ Read more

⤋ Read More

Economic hardship in Dunkley will see votes ‘spray in a myriad of directions’
Redbridge Group Director Simon Welsh says the “personal stuff” is what sticks with him in the aftermath of focus groups in the Dunkley electorate.

“It is the stories of the economic hardship – particularly that northern half of the electorate,” he told Sky News Australia.

“I think that is going to be so volatile.

“I don’t think it necessarily … ⌘ Read more

⤋ Read More

‘I’m not taking the word of any politician’: Andrew Forrest on nuclear energy push
Fortescue Chairman Andrew Forrest has rubbished the Coalition’s push for nuclear energy.

Mr Fortescue told Sky News Australia how he spoke with General Energy about the costs of implementing nuclear energy and the timeframe required.

“If I order one, when do I get one? And they said, ‘mate, look, 15 years’,” he said.

“I’m not going to … ⌘ Read more

⤋ Read More

Thousands of academic workers at York University go on strike
Some students at Toronto’s York University are worried about falling behind on their school work after a union representing 3,000 academic workers said the university didn’t meet their demand to “address the affordability crisis” and the workers went on strike. Dozens of union members including contract faculty, teaching and graduate assistants, research assistants and part-tim … ⌘ Read more

⤋ Read More

Here’s how Toronto’s new one-fare program works
GTA commuters will now be reimbursed their single-ride TTC fare when transferring to and from GO Transit as part of the city’s one-fare program. As CBC’s Patrick Swadden reports, the province has committed to funding the new program until March 2026. ⌘ Read more

⤋ Read More

How to Recover Unsaved Word Documents on Mac with AutoRecovery
While you should get in the habit of frequently saving your documents as you work in them, including in Microsoft Word, things don’t always go as planned. Many modern Mac apps will automatically save progress as you work in them, and Microsoft Word is one of them. Thanks to a feature called AutoRecovery, which saves … [Read More](https://osxdaily.com/2024/02/26/how-to-recover-unsaved-word-documents-on-mac-wit … ⌘ Read more

⤋ Read More

Iranians urged to vote in first elections since wave of protests
Voters in Iran are being urged to go to the polls as the country gears up for its first elections since Iran was rocked by nationwide protests over the death of Iranian Kurd Mahsa Amini, 22, after her arrest for allegedly violating the strict dress code for women. Surveys showed most voters don’t intend to take part in the poll. ⌘ Read more

⤋ Read More

Concept of gender pay gap is a ‘load of nonsense’: Caleb Bond
Sky News host Caleb Bond says the concept of gender pay gap is a “load of nonsense”.

Mr Bond said it “denies the biological reality” of women going off to have children.

“Which necessarily affects their lifetime earnings, because they tend to take more time out.

“Women tend to work in what you might call caring positions.

“Like nursing or teaching, that tend to be paid less … ⌘ Read more

⤋ Read More

Albanese wants to ‘hold on’ to younger voters: PM spotted going to Taylor Swift concert
The Australian’s National Editor Dennis Shanahan says Prime Minister Anthony Albanese wants to “hold on” to younger voters after he was spotted going to a Taylor Swift concert.

Mr Shanahan joined Sky News host Peta Credlin to discuss Mr Albanese’s reputation after attending the concert.

“Well the Prime Minister is constantly … ⌘ Read more

⤋ Read More

Klopp MASTERCLASS & Chelsea Fan *RANT*
Football Today Podcast - Episode 20, Monday February 26 - Klopp MASTERCLASS & Chelsea Fan RANT.

The Football Today Podcast debates their signature Yeah/Nah’s on if VAR is ruining the game and segments of performance, bellend, save and goal of the week in the EPL over the weekend.

The panel go through EPL Matchweek 26 match with the game of the weekend Arsenal vs Newcastle, Villa dominating and Fulham creating histor … ⌘ Read more

⤋ Read More

淺聊 Go 分佈式鏈路追蹤
在現代複雜的分佈式系統環境中,對應用或系統進行性能診斷,這是一個極具挑戰性的任務。有時候,微服務的問題可能會影響到整個系統的鏈路,引發一系列難以追蹤的問題。對於使用 Go 語言的開發者來說,我們有幸的是,對於鏈路追蹤,我們有強大的工具——Go 的鏈路追蹤。什麼是鏈路追蹤?——–鏈路追蹤是一種性能優化策略,通過跟蹤和管理請求在應用環境中的路徑,我們可以更好地理解系統的行爲、性能瓶頸等問題。 ⌘ Read more

⤋ Read More

Status 2024-02-25
Status report again!

Image

Figure 1: A visitor this morning.

Sitting in front of the wood stove in my country cottage. It’s nice
and quiet. Meanwhile it seems NordicFuzzCon is going on in Malmö.
4,000 furries. I had no idea! That seems fun!

On the other hand I just read that at least 10,000 were protesting in
Malmö today against the Israel-Palestine conflict. I’ve seen the much
smaller protest … ⌘ Read more

⤋ Read More

Golang 數據結構性能優化實踐
僅僅通過對 struct 字段重新排序,優化內存對齊方式,就可以獲得明顯的內存和執行效率提升。原文: How to Speed Up Your Struct in Golang[1]如果你有 Golang 開發經驗,一定定義過 struct 類型。但可能你不知道,通過簡單的重新排序 struct 字段,可以極大提高 Go 程序的速度和內存使用效率!是不是難以置信?我們一起來看一下吧!簡單 De ⌘ Read more

⤋ Read More

如何正確處理 Go 項目中關於文件路徑的問題
在使用 Go 開發項目時,估計有不少人遇到過無法正確處理文件路徑的問題,特別是剛從如 PHP、python 這類動態語言轉向 Go 的朋友,已經習慣了通過相對源碼文件找到其他文件。這個問題能否合理解決,不僅關係到程序的可移植性,還直接影響到程序的穩定性和安全性。本文將嘗試從簡單到複雜,詳細介紹 Go 中獲取路徑的不同方法及應用場景。歡迎關注我的公衆號:引言首先,爲什麼要獲取文件路徑?一般來說,程序 ⌘ Read more

⤋ Read More

使用 Templ 進行 Go 模板化
使用 Templ 在 Go 項目中高效生成動態內容的指南—————————-動態內容生成是 Web 開發的一個基本方面。無論您是在構建網站、Web 應用程序還是 API,根據數據和模板生成動態內容的能力都至關重要。在 Go 編程世界中,一個名爲 “Templ” 的強大工具簡化了這一過程。在這份全面的指南中,我們將探索使用 Templ 進行 Go 模板化,它的關鍵 ⌘ Read more

⤋ Read More

Golang 泛型入門指南
Go 語言中的泛型是指一種語言特性,允許創建可以處理不同類型的函數、數據結構和接口。換句話說,泛型使得可以創建不受特定類型或數據結構限制的代碼。如果我們此前有使用 Java 或者 C++ 的經驗,那麼會很好理解。在 Go 語言引入泛型之前,開發人員必須編寫多個函數來處理不同類型的數據。這種方法通常很繁瑣,並導致代碼重複。有了泛型,開發人員可以編寫更簡潔和可重用的代碼,可以處理不同類型的數據。Go ⌘ Read more

⤋ Read More

Go 利用上下文進行併發計算
在 Go 編程中,上下文(context)是一個非常重要的概念,它包含了與請求相關的信息,如截止日期和取消信息,以及在請求處理管道中傳遞的其他數據。在併發編程中,特別是在處理請求時,正確處理上下文可以確保我們尊重和執行請求中設定的限制,如截止時間。讓我們通過一些代碼示例來探討如何在併發計算中使用上下文,以及如何在處理請求時尊重上下文所設定的截止日期和取消要求。// download 函數用於下載給 ⌘ Read more

⤋ Read More

Go Module 語義化版本規範
Go Module 的設計採用了語義化版本規範,語義化版本規範非常流行且具有指導意義,本文就來聊聊語義化版本規範的設計和在 Go 中的應用。語義化版本規範語義化版本規範(SemVer)是由 Gravatars 創辦者兼 GitHub 共同創辦者 Tom Preston-Werner 所建立,旨在解決 依賴地獄 問題。它清楚明瞭的規定了版本格式、版本號遞增規:版本格式:採用 X.Y.Z 的格式,X ⌘ Read more

⤋ Read More

Go Gin 框架與 Let’s Encrypt 集成指南
本文將深入探討如何在 Go 語言的 Gin 框架中集成 Let’s Encrypt,以實現自動化管理 SSL/TLS 證書。Let’s Encrypt 作爲一個免費、自動、開放的證書頒發機構,能讓 HTTPS 部署變得簡單便捷。通過該教程,您將瞭解到如何配置 Gin 以支持 HTTPS 服務,並自動從 Let’s Encrypt 申請和續簽證書,確保 Web 應用的安全可靠性。爲什麼需要 Let’ ⌘ Read more

⤋ Read More

Golang 如何有效限制併發數?
Go 語言目前很火熱,一部分原因在於自身帶 “高併發” 的標籤,其本身就擁有優秀的併發量和吞吐量。1 協程可以無限創建嗎?我們在日常開發中會有高併發場景,有時會用多協程併發實現。在高併發業務場景,能否可以隨意開闢 goroutine 並且放養不管呢?畢竟有強大的 GC 和優越的 GMP 調度算法。看下面的代碼:package mainimport (    ”fmt”    ”math”    ” ⌘ Read more

⤋ Read More

用 Go 語言實現劉謙春晚魔術,還原尼格買提汗流浹背的尷尬瞬間-
龍年春晚如期而至,想必大家都看(沒)完(眼)了(看)吧,今年春晚最搞笑節目,當屬劉謙的魔術:《守歲共此時》,不過笑點不是節目本身,而是本場魔術的 托兒(主持人)尼格買提。小尼:已經開始流汗了 😅。本文將帶大家一起用 Go 語言來還原下整個魔術的過程。 在開始寫代碼前,翻車畫面必須置頂 🤣:這是一個公式魔術,即有着固定的套路,從數學角度來看是一個「約瑟夫問題」(嚴格證明可以在網上搜到,如果你感興趣 ⌘ Read more

⤋ Read More

在 Golang 中 如何實現 NATS JetStream 隊列
NATS JetStream 是一個高性能、持久化、分佈式消息隊列系統,它爲發佈 / 訂閱、隊列和流式處理提供了豐富的功能。在 Go 中實現 NATS JetStream 隊列可以通過 NATS 客戶端庫來完成。一、NATS JetStream 的歷史NATS JetStream 是 NATS 消息系統的一個重要組件,旨在提供持久性消息傳遞和流處理功能。下面是 NATS JetStream 的歷史 ⌘ Read more

⤋ Read More

精心設計的 DNS Failover 策略在 Go 中竟然帶來了反效果,發生了什麼?
本期作者衛智雄嗶哩嗶哩高級運維工程師一. 背景如下配置所示,我們在 /etc/resolv.conf 中配置了兩個 nameserver,其中 server2 在災備機房 ,作爲一種 failover 策略。nameserver server1nameserver server2options timeout:1 attempts:1我們的預期是如果 server1 服務正常,則所有的 DNS 請 ⌘ Read more

⤋ Read More

Go Gin 框架定義路由日誌格式
在本文中,我們將深入探討如何在 Go 語言的 Gin 框架中自定義路由日誌的格式。Gin 是一個高性能的 HTTP web 框架,它提供了一個默認的日誌格式,但在實際的開發環境中,我們可能需要根據特定的業務需求調整日誌輸出的格式。我們將從瞭解 Gin 的默認日誌格式開始,逐步地引導你自定義和擴展路由日誌的輸出方式。文章內容將詳實介紹相關的代碼實現,以確保你能夠在自己的工作中靈活運用。Gin 框架默 ⌘ Read more

⤋ Read More

Go 更強的代碼潔癖,可以把 gofmt 給換了!
大家好,我是煎魚。我們從一開始寫 Go 代碼和應用,就會被各種官方和民間教程,甚至 IDE 教導我們必須配一個 gofmt 工具。他能夠格式化 Go 程序的代碼。會使用製表符表示縮進,空白表示對齊。這解決了程序員屆的老大難問題之一,代碼格式上的規範問題。有效的提高了 Go 代碼的閱讀的友好度和減少了同事間的 ****。非常值得認可。但有時候,還是會看到一些糟心的代碼,總會覺得 gofmt,還是格式 ⌘ Read more

⤋ Read More

Go 中最常用的數據校驗庫
項目地址: github.com/go-playground/validator/v10| 標記 | 標記說明 | 例 || — | — | — || required | 必填 | Field 或 Struct validate:“required” || omitempty | 空時忽略 | Field 或 Struct validate:“omitempty” || len ⌘ Read more

⤋ Read More

Go Gin 框架的模型綁定與驗證詳解
在 Web 開發中,模型綁定和驗證是確保數據完整性和減少安全風險的重要步驟。Go 語言的 Gin 框架提供了強大而靈活的模型綁定和驗證機制,本文將深入講解 Gin 框架中如何進行模型綁定和驗證,以及如何自定義驗證器。在 Gin 框架中,模型綁定通常指將請求的數據(例如 JSON、表單數據)綁定到指定的結構體上,而驗證則是確保綁定後的數據符合我們設置的規則。Gin 框架使用binding標籤來實現模 ⌘ Read more

⤋ Read More

Go 語言版本 1-22 的路由增強功能
Go 1.22 對 net/http包中的路由器進行了兩項增強:方式匹配和通配符。這些特性允許你將常見的路由表示爲模式,而非 Go 代碼。儘管這些功能簡單易解釋和使用,但想選擇成功模式的正確規則(當多個模式匹配一個請求時)依然是個挑戰。我們作出這些改變是爲了持續讓 Go 成爲構建生產系統的優秀語言。我們研究了許多第三方 web 框架,提取出我們認爲最常用的特性,並將它們集成進 net/http。然 ⌘ Read more

⤋ Read More

使用 Gin 框架中的 PureJSON 發送未轉義的 JSON
當我們使用 Go 的 Gin web 框架來構建 RESTful API 時,通常會遇到返回 JSON 響應的需求。Gin 框架提供了c.JSON方法來以 JSON 格式發送回覆,同時它會對特殊字符進行轉義,比如把 < 轉換爲 \u003c。但在某些情況下,我們需要發送未轉義的 JSON 數據,這時我們就可以使用 Gin 框架中的c.PureJSON方法。在 Gin 框架中,c.PureJSON方 ⌘ Read more

⤋ Read More

GO 中高效 int 轉換 string 的方法與源碼剖析
Go 語言 中,將整數(int)轉換爲字符串(string)是一項常見的操作。本文將從逐步介紹幾種在 Go 中將 int 轉換爲 string 的常見方法,並重點剖析這幾種方法在性能上的特點。另外,還會重點介紹 FormatInt 高效的算法實現。使用 strconv.Itoa—————–最直接且常用的方法是使用 strconv 包中的 Itoa 函數。Itoa 是 “Int ⌘ Read more

⤋ Read More

Golang 實現協程池
Go 協程池解決的問題:當需要創建大量的goroutine的時候,如果不限定goroutine的數量,將是對程序的巨大災難 使用完的goroutinue可以複用繼續執行下一個任務(而不是立即銷燬),如果每次都是創建新goroutinue執行任務,頻繁的創建銷燬goroutinue導致利用率低下 項目地址 https://github.com/gofish2020/easygpool 歡 ⌘ Read more

⤋ Read More

MacOS Sonoma 14.3.1 Update Fixes Text Overlap Bug on Macs
iOS 17.3.1 and iPadOS 17.3.1, which fixes the same bug on iPhone and iPad, and watchOS 10.3.1, which resolves the bug on Apple Watch. How to Download & Install MacOS Sonoma 14.3.1 Update Be sure you backup the Mac to Time Machine before beginning any software update. Go to the  Apple menu Choose “System … Read MoreRead more

⤋ Read More

Go Gin 框架中間件中使用 Goroutine 的正確姿勢
在 Go 語言的 Gin 框架中,中間件和處理函數是處理 HTTP 請求的核心。有時候,我們需要在這些函數中啓動新的 Goroutine 來執行併發任務。然而,在 Goroutine 中直接使用 Gin 的上下文(gin.Context)可能會導致競態條件,因爲 Gin 的上下文不是併發安全的。本文將詳細介紹如何在 Gin 中間件或處理函數中正確地使用 Goroutine,並提供示例代碼來說明如何 ⌘ Read more

⤋ Read More

Go 防止流量過載的利器——限流組件
*一、服務流量限制的重要性隨着業務規模的增長, 服務的流量也會激增, 大流量可能會壓垮服務器, 導致服務癱瘓。因此需對服務的流量進行限制, 確保在大流量的情況下也能正常運行。當流量激增時, 會佔用大量服務器資源和帶寬, 可能會壓垮整個系統。比如流量激增期間數據庫連接用盡, 會導致服務無法訪問數據庫而宕機。用限制流量可以有效防止流量暴增壓垮系統。沒有限流時, 流量激增期間會啓動很多無用的任務佔用服務 ⌘ Read more

⤋ Read More

Go Gin 項目記錄日誌的最佳實踐
在任何一個複雜的軟件項目中,日誌記錄是必不可少的。無論是調試程序、監控系統狀態,還是統計用戶行爲,日誌都扮演了重要的角色。在 Go 的世界裏,Gin 是一種快速,簡單,靈活,優雅的 Web 框架,同時也提供了豐富的日誌記錄功能。本文將分享在 Gin 項目中如何進行高效的日誌記錄。創建 Gin 實例與中間件使用—————在創建 Gin 實例時,gin.Default()會默認加載 ⌘ Read more

⤋ Read More

使用 Go 打造百億級文件系統的實踐之旅
JuiceFS 企業版是一款爲雲環境設計的分佈式文件系統,單命名空間內可穩定管理高達百億級數量的文件。構建這個大規模、高性能的文件系統面臨衆多複雜性挑戰,其中最爲關鍵的環節之一就是元數據引擎的設計。JuiceFS 企業版於 2017 年上線,經過幾年的不斷迭代和優化,在單個元數據服務進程使用 30 GiB 內存的情況下,能夠管理約 3 億個文件,並將元數據請求的平均處理時間維持在 100 微秒量級 ⌘ Read more

⤋ Read More

Go1-22 新特性:增強 http-ServerMux 路由能力,將有更強的表現力!
大家好,我是煎魚。Go1.22 有一個比較重要的新特性,那就是基於提案《net/http: enhanced ServeMux routing[1]》,增強了 http.ServerMux 的路由匹配能力。非常值得大家學習和關注。本次的新特性主要是新增了 HTTP 方法和路徑變量的支持。快速學習—-在 Go 中,可以認爲幾乎所有的路由相關的庫都會基於 net/http 或是兼容其 interf ⌘ Read more

⤋ Read More

收到請求數據的常用安全驗證方案,go 語言,gin 框架
在使用 Gin 框架處理前端請求數據時,必須關注安全性問題,以防範常見的攻擊。本文將探討 Gin 框架中常見的安全問題,並提供相應的處理方法,以確保應用程序的穩健性和安全性。第一章:概述———-1.1 安全性的重要性處理前端請求數據時,確保應用程序的安全性是至關重要的。常見的攻擊方式包括 SQL 注入、跨站腳本攻擊(XSS)、跨站請求僞造(CSRF)等。下面我們將逐一探討這些問題及其處 ⌘ Read more

⤋ Read More

Go 語言通知協程退出 -取消- 的幾種方式
在 Go 語言中,控制 goroutine 的退出或取消很重要,這能使資源得到合理利用,避免潛在的內存泄露。如下是一些在 Go 中通知協程退出的常見方式:使用通道(Channel):通過發送特定的信號或關閉通道來通知協程退出。這是最簡單直接的方法。 使用 context 包:context 包提供了一種更標準化的方式來傳遞取消信號、超時、截止時間等控制信息。 使用 sync.Wait ⌘ Read more

⤋ Read More

Twtxt spec enhancement proposal thread 🧵

Adding attributes to individual twts similar to adding feed attributes in the heading comments.

https://git.mills.io/yarnsocial/go-lextwt/pulls/17

The basic use case would be for multilingual feeds where there is a default language and some twts will be written a different language.

As seen in the wild: https://eapl.mx/twtxt.txt

The attributes are formatted as [key=value]

They can show up in the twt anywhere it is not enclosed by another element such as codeblock or part of a markdown link.

⤋ Read More

Twtxt spec enhancement proposal thread 🧵

Adding attributes to individual twts similar to adding feed attributes in the heading comments.

https://git.mills.io/yarnsocial/go-lextwt/pulls/17

The basic use case would be for multilingual feeds where there is a default language and some twts will be written a different language.

As seen in the wild: https://eapl.mx/twtxt.txt

The attributes are formatted as [key=value]

They can show up in the twt anywhere it is not enclosed by another element such as codeblock or part of a markdown link.

⤋ Read More
In-reply-to » (#fytbg6a) What about using the blockquote format with > ?

@sorenpeter@darch.dk this makes sense as a quote twt that references a direct URL. If we go back to how it developed on twitter originally it was RT @nick: original text because it contained the original text the twitter algorithm would boost that text into trending.

i like the format (#hash) @<nick url> > "Quoted text"\nThen a comment
as it preserves the human read able. and has the hash for linking to the yarn. The comment part could be optional for just boosting the twt.

The only issue i think i would have would be that that yarn could then become a mess of repeated quotes. Unless the client knows to interpret them as multiple users have reposted/boosted the thread.

The format is also how iphone does reactions to SMS messages with +number liked: original SMS

⤋ Read More
In-reply-to » (#fytbg6a) What about using the blockquote format with > ?

@sorenpeter@darch.dk this makes sense as a quote twt that references a direct URL. If we go back to how it developed on twitter originally it was RT @nick: original text because it contained the original text the twitter algorithm would boost that text into trending.

i like the format (#hash) @<nick url> > "Quoted text"\nThen a comment
as it preserves the human read able. and has the hash for linking to the yarn. The comment part could be optional for just boosting the twt.

The only issue i think i would have would be that that yarn could then become a mess of repeated quotes. Unless the client knows to interpret them as multiple users have reposted/boosted the thread.

The format is also how iphone does reactions to SMS messages with +number liked: original SMS

⤋ Read More

使用 Go Gin SecureJSON 技術保護你的 JSON 數據
網絡上的安全問題一直是不能小覷的難題,尤其在 web 開發中,JSON 劫持就是其中的一種。這篇文章,我們將聚焦在 Go 框架 Gin 下的 SecureJSON 使用,來保護我們的 JSON 數據。什麼是 JSON 劫持?————JSON 劫持是一種網絡攻擊手段,攻擊者利用 JavaScript 的這個特性獲取到不屬於自己的數據。由於 JSON 數據一般包含非常敏感的個人信息,例 ⌘ Read more

⤋ Read More

替代 zap,Go 語言官方實現的結構化日誌包
在 Go 1.21 中,引入了一個新的 log 包 – log/slog,這是一個強大的日誌記錄庫,提供了許多用於幫助開發人員更加有效地記錄、管理和理解日誌的工具。無論你是一個初級還是高級的 Go 開發人員,理解和掌控 go 的日誌系統是非常有用的。接下來,讓我們深入研究一下 Go 中的日誌行爲,並通過實例來詳細理解每個主要功能。安裝–在 Go 1.21 中,log/slog 是系統自帶的,無 ⌘ Read more

⤋ Read More

Wasm on Go
本篇內容,是對極客兔兔: Go WebAssembly (Wasm) 簡明教程 [1] 的實踐與記錄,主體內容來自這篇博客,推薦閱讀原文。 是否需要搭建 wasm 環境? WebAssembly 上手 [2]如果是 C/C++,需要藉助 emcc,將 C 和 C++ 代碼編譯到 WebAssembly 和 JavaScript。在 Mac 上,brew install emscripten然後 ⌘ Read more

⤋ Read More

Go Web 開發不得不說的請求路由
*1. 請求路由的概念請求路由的定義:請求路由是指將客戶端的請求與服務器上對應的處理程序匹配和映射的過程。它決定了不同的 URL 或 API 請求被映射到哪些處理函數。請求路由的作用:請求路由實現了請求與處理函數之間的解耦,使代碼更加模塊化。同時,它也使得 URL 和 API 更符合 RESTful 設計規範。請求路由還可以實現諸如負載均衡、緩存、日誌記錄、身份驗證等功能。2. net/http ⌘ Read more

⤋ Read More

使用 Go 發送微信羣消息
背景最近的某個副業需要我寫一個腳本(腳本內容就不說了),需要通知羣成員,儘快地做出響應。所以去找一下 Go 是否有這樣的類庫。在這個腳本里面,我只需要發送信息的能力即可。openwechat在尋找了一會之後發現 https://github.com/eatmoreapple/openwechat 這個庫,這個庫支持以下能力:消息回覆、給指定對象(好友、羣組)發送文本、圖片、文件、emoji 表情等 ⌘ Read more

⤋ Read More

Go 實現多租戶示例
在 Go 中實現多租戶 (multi-tenancy) 通常涉及到下面幾個關鍵步驟:租戶識別: 你需要一個機制來區分請求是針對哪個租戶的。這可以通過多種策略實現,比如在 HTTP 請求的 URL、Header 或者是 Cookie 中嵌入租戶 ID。 數據隔離: 根據你選擇的數據隔離策略(如數據庫、schema 或者數據表的隔離),你需要確保租戶只能訪問到屬於他們的數據。 中間件 / ⌘ Read more

⤋ Read More

Go Gin 框架實現優雅地重啓和停止
在 Web 應用程序中,有時候我們需要重啓或停止服務器,無論是因爲更新代碼還是進行例行維護。在這種情景下,我們需要保證應用程序的可用性和數據的一致性。這就需要優雅地關閉和重啓應用程序,即不丟失正在處理的請求和不拒絕新的請求。在本文中,我們將詳解如何在 Go 語言中使用 Gin 這個框架實現優雅的重啓和停止。什麼是優雅重啓和停止———-優雅地重啓或停止一個 Web 服務就是指當我們需要更 ⌘ Read more

⤋ Read More

史上最詳細的 Gin 中間件使用教程
在本文中,我們將深入討論 Go-Gin 的中間件,詳細瞭解它們呈現如何有效地在任何特定的 Web 應用程序中插播操作。此外,我們還將瀏覽一些示例,幫助大家更好地理解。什麼是中間件?——-在討論 Gin 中間件之前,首先我們需要明確中間件的概念。中間件基本上是一個函數,它在您的應用程序收到請求和發送響應之間插播處理。在實際開發中,中間件被廣泛用於處理如日誌記錄、身份驗證、會話管理等方面。Gi ⌘ Read more

⤋ Read More

圖文講透 Golang 標準庫 net-http 實現原理 – 服務端
前言今天分享下 Go 語言 net/http 標準庫的內部實現邏輯,文章將從客戶端 (Client)– 服務端(Server) 兩個方向作爲切入點,進而一步步分析 http 標準庫內部是如何運作的。由於會涉及到不少的代碼流程的走讀,寫完後覺得放在一篇文章中會過於長,可能在閱讀感受上會不算很好,因此分爲【Server–Client 兩個篇文章】進行發佈。本文內容是【服務端 Server 部分】, ⌘ Read more

⤋ Read More

Go 司空見慣的錯誤檢測,原來還有這麼多幹貨-
*一、錯誤處理機制Go 語言以結果多值返回方式處理錯誤, 函數或者方法最後一個返回值作爲錯誤類型。func ReadFile(filename string) ([]byte, error)調用時根據錯誤值判斷是否正常data, err := ReadFile(“abc.txt”)if err != nil { // 處理錯誤} else { // 處理data}error 類型及其意義 ⌘ Read more

⤋ Read More

ebpf-go 初體驗
前言我們在《用 eBPF/XDP 來替代 LVS》系列、《一張圖感受真實的 TCP 狀態轉移》系列,以及《如何終結已存在的 TCP 連接?》系列文章中,均通過純 C 語言和 libbpf1 這個庫來運用 eBPF。但是很多的場景中(尤其是雲原生場景),我們出於避免重複造輪子、更快的迭代速度、運行時安全等原因,會選擇 go 語言來進行開發,ebpf-go2 這個庫就是當前最好的選擇。今天,我們就對 ⌘ Read more

⤋ Read More

Go 使用 cmux 實現網絡端口複用
cmux 的作用——– 一般情況下, 每個端口只能爲一個服務所用, 如果複用, 會報 “port is already in use”如果需要複用某個端口, 那麼可以使用 cmux 來實現 (其實大多數情況下必要性不大. 比如我就圖 8888 端口吉利, http/grpc 等服務都用這個端口)cmux[1] 全稱 Connection Mux, 是 Go 生態來複用端口的庫, 可 ⌘ Read more

⤋ Read More

Go 信號 - 守護進程開發爬坑指南
*一、信號 (signal) 處理信號是 Linux 系統下進程間通信的一種限制式異步通知機制。一個信號可以傳遞一個事件通知給一個進程, 代表一個異步事件。Go 語言內置了對信號的支持, 通過 os/signal 包可以實現 Go 程序對信號的處理。1.1 什麼是信號信號 (Signal) 是 Linux 系統下進程間通信的一種方式。當某個事件發生時, 內核會通知進程一個信號。進程接收到信號後, ⌘ Read more

⤋ Read More

Go 一文帶你喫透 HTTP 客戶端!
*1. HTTP 請求簡介HTTP(Hypertext Transfer Protocol) 是構建 web 應用通信的基石。HTTP 工作於客戶端 - 服務端架構上。HTTP 客戶端發起請求, 服務器接收請求並返回響應。HTTP 請求主要由請求行、請求頭、請求體組成請求行 GET /search?name=Golang HTTP/1.1請求頭部 Host: www.baidu ⌘ Read more

⤋ Read More

Go 定時器:Timer 和 Ticker
前言在日常開發中,我們可能會遇到需要延遲執行或週期性地執行一些任務。這個時候就需要用到 Go 語言中的定時器。在 Go 語言中,定時器類型有兩種:time.Timer 一次性定時器和 time.Ticker 週期性定時器。本文將會對這兩種定時器類型進行介紹。準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究竟吧。Timer:一次性定時器Timer 是一個一次性的定時器,用於在未來的某一時刻執行 ⌘ Read more

⤋ Read More