深入 Go interface: Duck Typing 和多態
Duck Typing鴨子類型(Duck Typing)是一種編程概念,關鍵在於根據對象的行爲來確定其類型。通常的解釋是通過一個巧妙的例子:根據對象的行爲來判斷它是否是一隻鴨子。如果它游泳像鴨子、嘎嘎叫像鴨子,那麼它就可以被認爲是一隻鴨子。動態語言如 Python 和 JavaScript 自然支持這種特性,但與靜態語言相比,動態語言缺乏重要的類型檢查。Go 語言的接口設計與鴨子類型概念密切相關, ⌘ Read more
9 個必備的 Go 語言 GitHub 庫
使用這些不可或缺的 GitHub 庫構建健壯高效的 Go 應用程序———————————在充滿活力的 Golang 開發生態系統中,GitHub 是一個寶庫,提供了許多寶貴的庫和包,這些庫和包簡化了開發工作流程,提高了生產效率,並促進了代碼重用。從 Web 框架到數據庫驅動,GitHub 倉庫託管了大量必備的 Go 庫,使開發人員能夠構建健壯且可擴展的應 ⌘ Read more
純 Go 實現的 MySQL 引擎——go-mysql-server
go-mysql-server 是一個用 Go 編寫的 MySQL 兼容的查詢引擎。它不僅是一個解析器,還是一個服務器和查詢執行引擎,完全使用 Go 語言編寫。與 Dolt 一樣,它的目標是成爲 MySQL 的 100% 兼容的替代品。go-mysql-server 具有以下兩個主要用途:作爲 Golang 測試環境中 MySQL 的替代品,使用內置的內存數據庫實現。 通過實現一些接口, ⌘ Read more
otter - A high performance lockless cache for Go. Many times faster than Ristretto and friends.
1 points posted by Everton Marques ⌘ Read more
又一個 Linux 桌面?用 Go 寫的 FyneDesk
FyneDesk 是一個易於使用的 Linux/Unix 桌面環境,遵循材料設計原則。它使用 Fyne 工具包構建,旨在易於使用和開發。我們使用 Go 語言,並歡迎任何對項目的貢獻或反饋。爲了完整的桌面體驗,您還需要安裝以下外部工具:arandr 用於修改顯示設置 xbacklight 或 brightnessctl 用於調整筆記本電腦的亮度 目前使用 connman-gtk 來配置 ⌘ Read more
Go 居然克隆了 Python 的 Requests 庫!
在現代軟件開發中,HTTP 請求處理是一個重要環節。Grequests 是 Go 語言中一個高效的 HTTP 請求庫,靈感來源於 Python 中廣受歡迎的 Requests 庫。本文將深入講解 Grequests 庫在 Go 語言中的實現和使用,幫助開發者快速掌握其強大功能。功能概述—-Grequests 庫爲 Go 開發者提供了一系列的便利功能,使得發送 HTTP 請求變得簡單高效。下面就 ⌘ Read more
Golang: 打造一個交互式命令行
Go 非常適合於構建命令行應用程序。我們構建了一個名爲 Dolt 的應用, 它是世界上第一個支持版本控制的 SQL 數據庫。我們爲處理 Dolt 的所有子命令和參數編寫了自己的命令行解析器, 但也許我們不應該這樣做。現在有很多很棒的工具可以替代我們自己編寫的解析器, 如果我們今天開始這個項目, 我們可能會選擇使用它們:spf13/cobra 提供了從簡單的文本命令格式生成代碼的強大支持, 並且可以 ⌘ Read more
Go 實現在線用戶消息推送實戰!
前言–今天老闆又給下了一個需求,在線用戶的消息推送,這個功能我相信 95% 的產品都有這個需求,比如下面的需求場景1: 運營給在線的用戶推送一些活動或者文案或者公告2: 實時監控和通知:在監控系統中,可以使用消息推送來實時向操作員發送系統警報和通知。例如,當系統出現異常或達到某個閾值時,服務器可以向操作員發送警報消息。3: 社交網絡和新聞資訊:使用消息推送來通知用戶有新的消息、新的粉絲或者新的內 ⌘ Read more
Go 通過 grpc-protobuf 實現高性能用戶服務實戰,從 0 到 1 超級詳細流程!!
基礎知識準備在在代碼實戰 gRPC 之前,我們需要了解一些基礎知識:RPC(Remote Procedure Call):遠程過程調用,是一種通信協議,允許應用程序在不同的計算機上請求服務而不需要了解底層網絡細節。 gRPC:gRPC 是一種高性能、開源的遠程過程調用(RPC)框架,由 Google 開發,並基於 HTTP/2、Protocol Buffers 等技術實現。 Proto ⌘ Read more
Pinellas County - Base: 7.44 miles, 00:09:09 average pace, 01:08:06 duration
the pain was there but it was one of those runs where i just felt like i could go on forever. really nice flow.
#running
用 Go 語言 - Redis 實現分佈式鎖,我還是第一次
一 爲什麼需要分佈式鎖 共享資源訪問控制: 當多個節點需要同時訪問共享資源時,爲了避免併發寫入導致數據不一致,需要使用分佈式鎖確保同時只有一個節點可以寫入或修改共享資源。避免重複執行: 在分佈式系統中,某些操作可能需要在整個系統中只執行一次,比如定時任務、數據初始化等。爲了避免多個節點同時執行這些操作,需要使用分佈式鎖來確保只有一個節點可以執行。任務協調: 在分佈式任務隊列中,多個節點競爭執行任 ⌘ Read more
Go 一行代碼測量函數的執行時間
Golang Tips 是翻譯的 Phuong Le @func25[1] 陸陸續續的發表的推文,目前已經發表 70 + 了。我徵得 Phuong Le 的同意後,會逐步把這些推翻翻譯過來,發佈到公衆號上。因爲是推文,可能原作者的內容比較簡單,比如第一個 tip 就一張圖片,我會相應的進行擴充,豐富其內容。 後續也會在 github 建立一個項目,大家都可以參與進行翻譯。我們可以通過 defe ⌘ Read more
專爲 Go 語言設計的函數式編程庫 fp-go
背景介紹在編程領域中,函數式編程是一種編程範式,它將計算視爲函數的評估,避免改變狀態和可變數據。然而,Go 語言並沒有內建對函數式編程的支持,這使得在 Go 語言中實現函數式編程變得困難。今天要給大家推薦一個 GitHub 開源項目 IBM/fp-go,該項目在 GitHub 有超過 1.1k Star,用一句話介紹該項目就是:“functional programming library for ⌘ Read more
Otter:探索 Go 語言中高效無鎖緩存庫的實現與應用
在當今軟件開發的背景下,性能優化已經成爲了一個不可或缺的部分。尤其是在緩存技術這一塊,優秀的緩存機制不僅能大幅提高應用的響應速度,更能夠有效減輕後端系統的壓力。今天,我們要深入探究的是 Otter——這是一個針對 Go 語言設計的高性能無鎖緩存庫。接下來,我們將詳細介紹 Otter 的設計原理、特性與使用方法,並通過實例演示如何在 Go 項目中集成 Otter。Otter 緩存庫概述——- ⌘ Read more
使用 gofn 和 pipe 助力 Golang 函數式編程
今天要介紹的是兩個在函數式編程裏面很有用的 package,通過使用 gofn[1] 和 pipe[2] 庫讓 Go 的函數式編程更強大。Go 的函數式編程由於本質上,Go 並不像 Haskell 或 Erlang 那樣是純函數式語言,但這並不意味着我們不能應用函數式編程的概念來編寫簡潔、可讀和高效的代碼。這正是 gofn 和 pipe 發揮作用的地方。gofn 和 pipegofn:一個在 Go ⌘ Read more
Go 標準庫中的一個設計敗筆:哨兵錯誤
大家好,我是煎魚。在 Go 的歷史發展中,總是有或多或少的坑。最近遇到一個跟錯誤類型定義和聲明使用有關的小坑。翻了一圈 Go 社區裏的爭論,發現又是一個暫時無法解決的未解之坑。今天分享給大家,平時開發時也可以給自己避避坑,以免有人亂用。快速背景—-在 Go 裏有一種錯誤類型的定義,官方叫做哨兵錯誤(Sentinel errors):哨兵錯誤,常用於在程序中與全局變量的值對比。可以參考最常見的 ⌘ Read more
gRPC OTel 鏈路追蹤
Open-Telemetry 的第三方軟件包合集 包括了多個社區中常用庫的 OpenTelemetry 支持。隨着 OpenTelemetry 的不斷迭代,相信整個鏈路追蹤的生態也會越發完善。gRPC 的鏈路追蹤———-採集 gRPC 的 trace 數據,推薦使用 otelgrpc 。安裝依賴。go get go.opentelemetry.io/contrib/instrument ⌘ Read more
Go 類型安全的 Pool
池(sync.Pool)是一組可單獨保存 (Set) 和檢索 (Get) 的臨時對象集合。存儲在池中的任何項都可能在任何時候自動移除而無需通知。如果池在移除項時持有該對象的唯一引用,那麼這個對象可能會被釋放掉。池能夠確保在多個 goroutine 同時訪問時的安全性。池的目的在於緩存已分配但未使用的對象以便後續複用,減輕垃圾收集器的壓力。也就是說池的功能是爲了重用對象,目的是減輕 GC 的壓力。類 ⌘ Read more
Benchmark comparing the performance of GRPC to HTTP/1 and HTTP/2 on golang
1 points posted by Everton Marques ⌘ Read more
https://ryelang.org/ Interestig programming language based on ideas from Rebol, flavored by Factor, Linux shell and Go with a good REPL
Go HTTP 鏈路追蹤
Open-Telemetry 的第三方軟件包合集 包括了多個社區中常用庫的 OpenTelemetry 支持。隨着 OpenTelemetry 的不斷迭代,相信整個鏈路追蹤的生態也會越發完善。基於 OTel 的 HTTP 鏈路追蹤——————-基於 OTel 的 HTTP 客戶端和服務端鏈路追蹤實踐。客戶端實現 HTTP client 的鏈路追蹤。package maini ⌘ Read more
Golang 使用 Worker Pool 模式釋放併發性能
我們都知道 Go 具有卓越的併發特性,Worker Pool pattern(工作池模式)是一種併發設計模式,它用於管理一組工作線程以執行任務。本文用一個例子深入講解如何使用 Worker Pool 模式提升程序的併發性能。拋出問題快速計算一個數字數組中每個數字的平方,並返回結果數組(該數組只包含從 1 到 150 的整數)。Pattern 1 : N routines for N numbers ⌘ Read more
Golang 如何動態解析 JSON
Go 以其簡潔高效而聞名,提供了強大的工具用於處理 JSON 數據。雖然基於結構體的解析很常見,但在某些情況下,JSON 結構是動態的或未知的。在本文章中,我們將探討如何使用 Go 語言中的空接口進行動態 JSON 解析,從而實現靈活性,無需預定義結構體。什麼是 Dynamic JSON Parsing動態 JSON 解析指的是能夠處理具有不同結構的 JSON 數據,適應不同模式而無需嚴格定義。在 ⌘ Read more
一文掌握 Golang Empty Struct 的所有用法
在 Go 語言中,空結構體被用作佔位符,當我們想要創建一個不攜帶任何數據的類型時。這個概念經常被用來表示特定的行爲,或者將該類型用作類似集合的數據結構。下面是個使用空結構體的例子:package mainimport ( ”fmt” ”unsafe”)// EmptyStruct is an empty struct typetype EmptyStruct struct{}func main() ⌘ Read more
Golang 如何實現訪問私有成員
在 Go 語言編程中,我們都知道首字母小寫的成員表明它是不公開的,即私有的。一般情況下,我們無法直接訪問一個包中的私有成員。然而,Go 語言提供了一些不尋常的手段允許我們在特定情況下繞過這一限制。在這篇文章中,我們將深入探討這些技巧,並通過詳細的說明和代碼示例來展示它們的使用方法。但在此必須提醒:這些方法很少用於生產環境,因爲它們破壞了封裝性,很容易帶來難以發現的 bug 和安全問題。在下文,我們 ⌘ Read more
How to Convert MOV to MP4 on Mac Free with ffmpeg
If you have a video file in MOV format, you may wish to convert the MOV video to MP4 format instead. While there are a variety of methods for converting MOV to MP4, the approach we’re going to address here is by using the command line, with a super easy to use and free tool … Read More ⌘ Read more
It’s now loved all over the world, but who really invented the flat white?
This is the little-known story of how Italian sugar growers in the Sunshine State are said to have inspired the “invention” of the flat white — a drink that would go on to become a global sensation. ⌘ Read more
用 Go 語言實現多協程文件上傳,斷點續傳,試試!
網上很多文件基本都是多協程下載文件要麼就只有單協程的斷點續傳,這裏給大家寫一個支持有進度條的多協程下載文件,也支持斷點續傳。好了,直接看代碼就好了,小編已加上詳細的解釋與說明package mainimport ( ”fmt” ”io” ”os” ”regexp” ”strconv” ”sync” ”github.com/qianlnk/pgbar”)/* 需求:1. 多協程下載文件2.斷點續連* ⌘ Read more
使用 Go 語言打造強大的網絡掃描神器
在這個信息安全意識日益提高的時代,網絡安全人員需要可靠、靈活且強大的工具來進行日常的網絡掃描和數據收集。在衆多開源項目中,Project Discovery 的 httpx 無疑是一顆璀璨的明星。httpx 是一款能夠執行大量 HTTP 請求的命令行工具,旨在對 Web 服務進行多功能且快速的掃描。它支持 HTTP/2, 支持進行方法、頭等多種格式的複雜查詢,還能檢測 Web 服務器的許多面向安全 ⌘ Read more
Go 語言中怎麼使用依賴注入?
01 介紹在 Go 語言項目開發中,我們處理組件層級之間的依賴關係時,通常我們會先在依賴層級的代碼中實例化被依賴層級,然後調用它的方法,即依賴方需要主動獲取被依賴方。但是,當被依賴層級的代碼發生變化時,依賴層級的代碼也需要修改,耦合性比較高,代碼不方便擴展。所謂依賴注入,即依賴方不再需要主動獲取被依賴方,而是被依賴方主動傳遞給依賴方。本文我們介紹 Go 語言怎麼使用依賴注入。02 Go 語言使用依 ⌘ Read more
Service message: No #FridayRockMetal tonight \m/ I’ll go to a party \m/. In the meantime, you can check the playlists: https://galusik.fr/fridayrockmetal/index.txt
深入理解 Go 併發,靈活的 goroutine 模型與調度策略
在go中,協程co-routine被改爲goroutine,一個goroutine只佔幾 kb,因此可以有大量的goroutine存在,另一方面goroutine 的調度器非常靈活,本文給大家介紹下Go併發的方法之goroutine模型與調度策略,感興趣的朋友一起看看吧單進程操作系統早期的單進程操作系統,可以理解爲只有一個時間軸,CPU 順序執行每一個進程 / 線程,這種順序執行的方式,CPU 同 ⌘ Read more
NewsToday2: What it is & How to Disable NewsToday2 on Mac
Some Mac users have discovered a process named “NewsToday2” running on their Mac, typically found after they’ve noticed a slowdown on their machine, or if they’re browsing through active processes running in MacOS. We’re going to dive into the NewsToday2 process in MacOS, discuss what it is, and show you how to stop it from … Read More ⌘ Read more
最具研讀價值的 Go 源碼之一:context 包
前言你瞭解 Context 中的回溯鏈和樹結構嗎?想知道 Context 如何觸發級聯取消嗎?本文將換個角度聊一聊 golang 中的 context,讓你真正理解什麼是 Context。context 包中的代碼雖然只有 600 多行,但已經成爲了併發控制、超時控制的標準做法,可以說是真正的短小而精悍,是十分值得研讀的 Go 源碼之一。本文首先從整體的視角解析了 context 的主要接口和函數 ⌘ Read more
一文帶你完整了解 Go 語言 IO 基礎庫
作者 | 百度小程序團隊 導讀 introduction對於剛接觸 Golang 學習的同學,估計比較難掌握的知識點之一就是文件 IO 處理,光在基礎庫裏會發現 golang 除了 io 包提供文件處理外,os 包,http 包,embed 包都有提供類似的處理,由於 Golang 的繼承表達採用的是隱式的表達, 所以他們之間有什麼關係?能否相互轉換處理?是非常難一眼看出來的。本文就幫大家完整地 ⌘ Read more
John Wall didn’t own a sampler until he was 40. Life can go ways, it’s good to remember.
About death
I’m on a train again. This time I’m going home from Hudiksvall after a
grueling weekend.
I went from Malmö on Thursday morning and worked the entire day on
trains. I arrived in Ljusdal after close to nine hours. I checked in
at the only hotel in town again and, after a quick meal and glass of
wine, went over to a very sad dad with a bottle of Macallan. We didn’t
empty it but we sure tried. I got back to the hotel pretty late.
Wasn’t able to sleep much.
The day after it was my dad’s wife’s funeral. Met up at dad’s … ⌘ Read more
go 中更加強大的 traces
原文地址:More powerful Go execution traces 原文作者:Michael Knyszek 本文永久鏈接: https://github.com/gocn/translator/blob/master/2024/w12morepowerfulgoexecutiontraces.md 譯者:小超人 Go 版本: 1.22+ ru ⌘ Read more
OpenTelemetry Go 語言教程
本教程將演示如何在 Go 中使用 OpenTelemetry,我們將手寫一個簡單的應用程序,並向外發送鏈路追蹤和指標數據。準備示例應用程序——–創建一個扔骰子的程序。在本地新建一個dice目錄,並進入該目錄下。mkdir dicecd dice執行 go mod 初始化。go mod init dice在同一目錄下創建 main.go 文件,並添加以下代碼。package mainimp ⌘ Read more
Go 語言的宕機恢復,如何防止程序奔潰
Recover 是一個 Go 語言的內建函數,可以讓進入宕機流程中的 goroutine 恢復過來,recover 僅在延遲函數 defer 中有效,在正常的執行過程中,調用 recover 會返回 nil 並且沒有其他任何效果,如果當前的 goroutine 陷入恐慌,調用 recover 可以捕獲到 panic 的輸入值,並且恢復正常的執行。通常來說,不應該對進入 panic 宕機的程序做任何 ⌘ Read more
Base: 4.50 miles, 00:09:41 average pace, 00:43:35 duration
was not sure if i was going to be able to get a run in or not. felt a bit rushed but overall it was a good one.
#running #treadmill
Pinellas County - Base: 4.76 miles, 00:09:04 average pace, 00:43:07 duration
good run with no pain. legs were still sore but no big deal. i think i was going a bit too fast and needed to slow it down by about ~30 seconds, but the body did not seem like it was pushing too much either.
#running
Go 語言的雙向鏈表、list 操作和雙向循環鏈表- 這些誰認識?
雙向鏈表1)雙向鏈表的結構雙向鏈表結構中元素在內存中不是緊鄰空間,而是每個元素中存放上一個元素和後一個元素的地址第一個元素稱爲(頭)元素,前連接(前置指針域)爲 nil 最後一個元素稱爲 尾(foot)元素,後連接(後置指針域)尾 nil 雙向鏈表的優點在執行新增元素或刪除元素時效率高,獲取任意一個元素,可以方便的在這個元素前後插入元素 充分利用內存空間,實現內存靈活管理 ⌘ Read more
更強大的 Go 執行跟蹤能力
runtime/trace 包 1] 包含了一個強大的工具, 可用於理解和調試 Go 程序。該功能允許我們在一段時間內對每個 goroutine 的執行進行跟蹤。使用 go tool trace 命令 [2), 我們就可以可視化和探索這些跟蹤數據。跟蹤的魔力在於, 它可以輕鬆揭示程序中一些通過其他方式很難發現的問題。例如, 大量 goroutine 在同一個 channel 上阻塞導致的併發瓶頸, ⌘ Read more
使用 mapstructure 高效解析 Go 語言中的動態數據結構
在處理數據流(如 JSON、Gob 等)過程中,我們可能不知道底層數據的結構,這時mapstructure庫就能大顯身手了。這款 Go 語言庫可以將通用 map 值解碼爲 Go 本地結構,也可執行反向操作,並提供有用的錯誤處理功能。今天,我們就深入瞭解這個庫,並列舉一些豐富的示例來幫助你掌握它的使用方法。簡介–mapstructure是一款 Go 庫,允許開發者將map[string]inter ⌘ Read more
Proprietary video stream; wealthy company lighting expensive candles
Big rocket go brrr
Go 錯誤處理:用 select-case 來解決這個歷史難題?
大家好,我是煎魚。日常看 Go 社區的一些新動態,發現大家對於錯誤處理的新提案是很積極。上次分享了一篇想要用 switch-case 來解決現狀的新提案,不少同學認爲不可行。沒想到 Go 社區的同學腦洞還是很大的,這幾天又整出來個 select-case 的新提案的方式來解決錯誤處理。今天基於此給大家分享一下社區裏的新腦洞。快速背景—-本節的背景主要是給不瞭解的同學拉通一下。如果已經知道的可以 ⌘ Read more
Go state machine patterns
1 points posted by John Doak ⌘ Read more
Go 中的高速數據包處理: 從 net-Dial 到 AF_XDP
推進 Go 的極限: 從 net.Dial 到系統調用、AFPACKET 和極速 AFXDP。數據包發送性能的基準測試。最近, 我編寫了一個 Go 程序, 向數百萬個 IP 地址發送 ICMP ping 消息 [1]。顯然, 我希望這個過程能儘可能快速高效地完成。因此, 這促使我研究各種與網絡棧交互和快速發送數據包的各種方法。這是一個有趣的旅程, 所以在本文中, 我將分享一些學習成果, 並記錄 ⌘ Read more
寶藏級 Go 語言開源項目——教你自己動手開發互聯網搜索引擎
DIYSearchEngine 是一個能夠高速採集海量互聯網數據的開源搜索引擎,採用 Go 語言開發。Github 地址: https://github.com/johnlui/DIYSearchEngine 運行方法 首先,給自己準備一杯咖啡。把本項目下載到本地 編譯:go build -o ese *.go 修改配置文件:cp .env.example .env,然後把裏面的 ⌘ Read more