開源一個輕量級 Go 工具庫:go-commons

項目背景

在日常 Go 開發中,我們經常需要處理字符串操作和系統監控相關的功能。雖然 Go 標準庫提供了基礎的字符串處理能力,但在實際項目中,我們往往需要一些更便捷的工具函數來提高開發效率。

基于"盡可能不使用第三方依賴"的原則,我開發了 go-commons 這個輕量級的 Go 工具庫,專注于提供常用的字符串操作和系統工具函數。

在這里插入圖片描述

項目特色

🎯 設計原則

  • 零第三方依賴:優先使用 Go 標準庫,避免依賴地獄
  • API 簡潔清晰:函數命名直觀,參數設計合理
  • 完整測試覆蓋:每個函數都有對應的單元測試
  • 中英文文檔:提供完整的中英文 API 文檔

📦 核心功能

字符串工具 (stringutils)
  • 空值檢查IsEmptyIsNotEmptyIsBlankIsNotBlank
  • 字符串處理TrimTruncateTruncateWithSuffix
  • 大小寫轉換CapitalizeUncapitalizeToUpperCaseToLowerCase
  • 字符串操作ReverseStringContainsAnyContainsAll
  • 子字符串處理SubstringBeforeSubstringAfter
  • 字符串連接JoinSplit
  • 替換操作ReplaceReplaceAll
  • 填充功能PadLeftPadRightCenter
  • 其他實用功能RepeatCountMatchesDefaultIfEmptyDefaultIfBlank
系統工具 (systemutils)
  • 預留了 cpuutilsmemutilsdiskutils 目錄結構
  • 為后續添加系統監控功能做好準備

在這里插入圖片描述

使用示例

安裝

go get github.com/Rodert/go-commons

基礎用法

package mainimport ("fmt""github.com/Rodert/go-commons/stringutils"
)func main() {// 空值檢查fmt.Println(stringutils.IsBlank("  \t\n"))         // truefmt.Println(stringutils.IsNotEmpty("hello"))      // true// 字符串處理fmt.Println(stringutils.Trim("  hello  "))       // "hello"fmt.Println(stringutils.Capitalize("hello"))     // "Hello"fmt.Println(stringutils.ReverseString("golang")) // "gnalog"// 截斷和填充fmt.Println(stringutils.TruncateWithSuffix("abcdef", 4, "..")) // "ab.."fmt.Println(stringutils.PadLeft("42", 5, '0'))                // "00042"// 包含檢查fmt.Println(stringutils.ContainsAny("gopher", "go", "java"))  // true// 默認值處理fmt.Println(stringutils.DefaultIfEmpty("", "default"))       // "default"
}

實際應用場景

1. 數據驗證
// 檢查用戶輸入
if stringutils.IsBlank(userInput) {return errors.New("輸入不能為空")
}// 設置默認值
displayName := stringutils.DefaultIfBlank(userName, "匿名用戶")
2. 字符串格式化
// 格式化ID顯示
formattedID := stringutils.PadLeft(id, 8, '0')// 截斷長文本
summary := stringutils.TruncateWithSuffix(longText, 100, "...")
3. 文本處理
// 提取域名
domain := stringutils.SubstringAfter(url, "://")// 檢查文件擴展名
if stringutils.EndsWith(filename, ".go") {// 處理Go文件
}

項目結構

go-commons/
├── stringutils/           # 字符串工具包
│   ├── stringutils.go    # 核心實現
│   └── stringutils_test.go # 單元測試
├── systemutils/          # 系統工具包(預留)
│   ├── cpuutils/         # CPU相關工具
│   ├── memutils/         # 內存相關工具
│   └── diskutils/        # 磁盤相關工具
├── examples/             # 使用示例
│   └── stringutils/
│       └── main.go       # 可運行示例
├── README.md             # 英文文檔
├── README-zh.md          # 中文文檔
├── LICENSE               # Unlicense許可證
└── go.mod                # Go模塊定義

開源價值

🌟 為什么選擇開源

  1. 社區貢獻:希望為 Go 社區提供實用的工具函數
  2. 學習交流:通過開源項目與更多開發者交流經驗
  3. 持續改進:社區反饋幫助項目不斷完善
  4. 知識分享:分享 Go 開發的最佳實踐

📈 項目優勢

  • 輕量級:無第三方依賴,體積小
  • 易用性:API 設計簡潔,學習成本低
  • 可擴展:模塊化設計,易于添加新功能
  • 文檔完善:中英文文檔,支持 pkg.go.dev 展示

🚀 未來規劃

  1. 完善系統工具:添加 CPU、內存、磁盤監控功能
  2. 增加更多示例:提供更多實際應用場景
  3. 性能優化:持續優化函數性能
  4. 社區建設:歡迎 Issue 和 PR 貢獻

許可證

項目采用 Unlicense 許可證,完全開放,允許任何形式的商業和非商業使用。

貢獻指南

歡迎任何形式的貢獻:

  • 🐛 Bug 報告:發現問題請提交 Issue
  • 💡 功能建議:有新想法歡迎討論
  • 🔧 代碼貢獻:歡迎提交 Pull Request
  • 📖 文檔改進:幫助完善文檔和示例

總結

go-commons 是一個專注于實用性的 Go 工具庫,通過提供常用的字符串操作函數,幫助開發者提高開發效率。項目遵循"簡單、實用、無依賴"的設計理念,適合在各種 Go 項目中使用。

如果你覺得這個項目有用,歡迎 Star 和 Fork,也歡迎提交 Issue 和 PR 來幫助項目不斷完善!

項目地址https://github.com/Rodert/go-commons

在線文檔https://pkg.go.dev/github.com/Rodert/go-commons


本文介紹了 go-commons 項目的設計理念、核心功能和使用方法,希望能為 Go 開發者提供一些參考和幫助。



go-commons

A zero-dependency Go utility kit for everyday development

Project Background

When writing Go code we all end up re-implementing the same small helpers:
“Is this string only whitespace?” “Pad this ID with zeros.” “Truncate and add an ellipsis.”
The standard library is great, but a concise, well-tested utility layer saves time and keeps projects consistent.

go-commons is that layer—no third-party dependencies, clear API, 100 % test coverage, bilingual docs.

Design Goals

  • Zero dependencies – only the Go standard library
  • Intuitive API – names you can guess without reading the docs
  • Fully tested – every exported function has unit tests
  • Bilingual docs – complete English & Chinese documentation
  • Module-firstgo get and use, no init steps

What’s Inside

stringutils

CategoryExamples
Empty checksIsEmpty, IsBlank, IsNotBlank
TrimmingTrim, Truncate, TruncateWithSuffix
CaseCapitalize, ToUpperCase, ToLowerCase
Reverse / containsReverseString, ContainsAny, ContainsAll
SubstringsSubstringBefore, SubstringAfter
Join / splitJoin, Split
ReplaceReplace, ReplaceAll
PaddingPadLeft, PadRight, Center
MiscRepeat, CountMatches, DefaultIfEmpty, DefaultIfBlank

systemutils (placeholder structure)

cpuutils/, memutils/, diskutils/ – ready for future host-metrics helpers.

Quick Start

go get github.com/Rodert/go-commons
package mainimport ("fmt""github.com/Rodert/go-commons/stringutils"
)func main() {// emptinessfmt.Println(stringutils.IsBlank("  \t\n"))     // truefmt.Println(stringutils.IsNotEmpty("hello"))  // true// trim & casefmt.Println(stringutils.Trim("  hello  "))   // "hello"fmt.Println(stringutils.Capitalize("hello")) // "Hello"// reversefmt.Println(stringutils.ReverseString("golang")) // "gnalog"// truncate & padfmt.Println(stringutils.TruncateWithSuffix("abcdef", 4, "..")) // "ab.."fmt.Println(stringutils.PadLeft("42", 5, '0'))                // "00042"// containsfmt.Println(stringutils.ContainsAny("gopher", "go", "java")) // true// default valuefmt.Println(stringutils.DefaultIfEmpty("", "default")) // "default"
}

Real-World Recipes

1. Validate input

if stringutils.IsBlank(userInput) {return errors.New("input required")
}
name := stringutils.DefaultIfBlank(userName, "Anonymous")

2. Format identifiers

orderID := stringutils.PadLeft(strconv.Itoa(id), 8, '0')

3. Summaries

summary := stringutils.TruncateWithSuffix(article, 120, "…")

4. Quick parsing

domain := stringutils.SubstringAfter(url, "://")
if stringutils.HasSuffix(file, ".go") { /* … */ }

Repository Layout

go-commons/
├── stringutils/
│   ├── stringutils.go
│   └── stringutils_test.go
├── systemutils/
│   ├── cpuutils/
│   ├── memutils/
│   └── diskutils/
├── examples/
│   └── stringutils/
│       └── main.go
├── README.md
├── README-zh.md
├── LICENSE
└── go.mod

Why Open-Source?

  1. Give back to the Go community
  2. Learn from peer review
  3. Evolve faster with issues & PRs
  4. Share idiomatic Go patterns

Roadmap

  • Host-metrics helpers (CPU, memory, disk)
  • More examples & benchmarks
  • Performance tuning
  • Community guidelines & contributor covenant

License

The Unlicense – public domain, no restrictions, commercial or otherwise.

Contributing

All contributions welcome:

🐛 Open an issue for bugs
💡 Propose features in discussions
🔧 PRs must include tests & godoc comments
📖 Help with docs, examples, translations

Star & Share

If go-commons saves you time, please star the repo and spread the word!

Home: https://github.com/Rodert/go-commons
PkgDoc: https://pkg.go.dev/github.com/Rodert/go-commons

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96065.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

clang(clangd)與arm-linux-gcc、ARMGCC、ICCARM(IAR)、C51編譯器的兼容性

環境:vscodeclangdEIDE開發開發單片機(C51 keilMDK IAR)。 vscode遠程clangdarm-linux-gcc(交叉編譯工具鏈)。 (1)首先clang(clangd)是兼容gcc的,也就是兼容arm-linux-gcc&#xff…

Docker 部署 Rancher2.4.4

獲取2.4.4鏡像包docker pull rancher/rancher:v2.4.4創建目錄并賦予權限mkdir -p /home/rancher/{data,log} && chmod -R 777 /home/rancher啟動容器docker run -d \ --privileged \ --name rancher \ --restartunless-stopped \ -p 80:80 -p 443:443 \ -v /home/ranc…

無root使用adb模式下的scene 用shizuku激活scene教程

本次教程是用shizuku和ShizukuRunner激活scene的adb模式,實現大部分功能,比較簡單,如果手機已經root直接使用root模式即可。 工具 scene(點我下載) Shizuku(點我下載) ShizukuRunner(點我下載) 教程 1.首先要有一臺支持無線調試的手機(安…

《UE5_C++多人TPS完整教程》學習筆記50 ——《P51 多人游戲中的俯仰角(Pitch in Multiplayer)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P51 多人游戲中的俯仰角(Pitch in Multiplayer)》 的學習筆記,該系列教學視頻為計算機工程師、程序員、游戲開發者、作家(Engineer, Programmer, Game Developer, Author&…

樹莓派 Ubuntu 24.04 開機換源總結

1. 圖形界面 (桌面版) 如果你刷的是 Ubuntu Desktop 24.04:打開 Software & Updates(軟件和更新)。在 Ubuntu Software 標簽里找到 Download from 下拉菜單。默認只有 Main server 和 Server for China,如果想要更多選擇&…

工業顯示器在地鐵電力監控與運維中的應用

在地鐵電力監控與運維中,工業顯示器憑借其高可靠性、環境適應性和強大的功能集成,成為保障地鐵供電系統安全穩定運行的核心設備。以下從關鍵應用場景、技術優勢及實際案例三個維度展開分析:一、核心應用場景變配電室與環控電控室監控 工業顯示…

Docker 快速部署單節點 NiFi 1.27

Docker 快速部署單節點 NiFi 1.27 前言 Apache NiFi 是一款強大的數據集成工具,專注于數據的采集、處理和分發,具有可視化流程設計、強大的容錯能力等特點。通過 Docker 部署可以快速搭建環境,省去復雜的配置步驟。本文介紹如何使用官方鏡像…

php redis 中文API文檔手冊

php redis 中文API文檔手冊 Redis::__construct構造函數 $redis new Redis();connect, open 鏈接redis服務 參數 host: string,服務地址 port: int,端口號 timeout: float,鏈接時長 (可選, 默認為 0 ,不限鏈接時間) 注: 在redis.conf中也有時間&#xf…

Windows環境下實現GitLab與Gitee倉庫代碼提交隔離

1. 背景 在開發工作中,我需要同時使用2個代碼托管平臺:公司統一使用的GitLab和個人學習用的 Gitee。我希望能夠在同一臺電腦上方便地管理和提交兩個平臺的代碼,實現賬號和提交內容的有效隔離。 前提條件: 已安裝Git Bash、Tort…

深度解析:抗輻射電源芯片 ASP4644S2B 在空間環境中的單粒子效應表現

摘要:隨著航天技術的飛速發展,空間電子設備面臨著日益復雜和嚴苛的輻射環境挑戰。單粒子效應(SEE)作為輻射環境對半導體器件影響的主要形式之一,極大地影響著航天電子系統的可靠性和穩定性。本文通過系統梳理國科安芯推…

【RabbitMQ】如何在 Ubuntu 安裝 RabbitMQ

1. 安裝部署 Erlang 環境 RabbitMQ 是一套開源的消息隊列服務軟件,基于 Erlang 語言編寫的,因此,在安裝 RabbitMQ 之前,我們需要先部署 Erlang 環境,再安裝 RabbitMQ 環境(就像運行 Java 程序,…

vue集成高德地圖API工具類封裝

import axios, { AxiosInstance, AxiosResponse } from axios;// 高德地圖 API 響應基礎結構 interface AMapResponse {status: string;info: string;infocode: string; }// 逆地理編碼響應結構 interface RegeoResponse extends AMapResponse {regeocode: {formatted_address:…

手寫 Tomcat

文章目錄02 初出茅廬:構造一個極簡的 HttpServerRequestResponseHttpServer03 動態 Response : 按照規范構造返回流04 各司其職的 Server : 拆分響應模塊與處理模塊HttpConnectorHttpProcessor05 Server 性能提升: 設計多個 ProcessorHttpConnectorHttpProcessor06 規范化: 引入…

嵌入式ARM架構學習3——啟動代碼

一 匯編補充&#xff1a;area reset, code, readonlycode32entry;mov r0, #4 ; r0 4;mov r1, r0 ; r1 r0;mov r2, r1, lsl #1 ;r2 r1 << 1 乘2;mov r3, r1, lsr #1 ;r3 r1 >> 1 除2;mov r4, r1, ror #2;mov r0, #100 ;100是十進制 轉為16進制賦值給十進制;mov …

PNPM庫離線安裝方案

以下是幾種可行的方案&#xff0c;推薦優先使用方案一。 方案一&#xff1a;使用離線鏡像&#xff08;Offline Mirror&#xff09; - 最優雅、最PNPM的方式 這是 PNPM 官方推薦的處理離線環境的方式。它會在內網電腦上創建一個所有依賴包的壓縮文件&#xff08;tarball&#x…

[Wit]CnOCR模型訓練全流程簡化記錄(包括排除BUG)

stepfile:step 00 創建數據集 目錄結構 yourproject -data --myset ---images #存放訓練圖片 ---dev.tsv #測試標簽 tsv格式 圖片文件名\t內容 ---train.tsv #訓練標簽 tsv格式 圖片文件名\t內容 -train_config.json -train_config_gpu.json -fix_cnocr_encoding.py step 01 創…

Sklearn(機器學習)實戰:鳶尾花數據集處理技巧

1.數據集的使用&#xff1a;先使用load導入鳶尾花數據&#xff1a;from sklearn.datasets import load_iris然后定義一個函數來查看鳶尾花數據集&#xff1a;數據集的獲取&#xff1a;iris load_iris()print(鳶尾花的數據集&#xff1a;\n,iris)使用iris[DESCR]來查看數據及里…

【企業微信】接口報錯:javax.net.ssl.SSLHandshakeException

詳細報錯信息 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target原因 關于qyapi…

光子芯片驅動的胰腺癌早期檢測:基于光學子空間神經網絡的高效分割方法

光子芯片驅動的胰腺癌早期檢測:基于光學子空間神經網絡的高效分割方法 1 論文核心概念 本文提出了一種基于集成光子芯片的光學子空間神經網絡(Optical Subspace Neural Network, OSNN),用于胰腺癌的早期檢測與圖像分割。其核心思想是利用光子芯片的高并行性、低延遲和低能…

Scikit-learn Python機器學習 - 特征降維 壓縮數據 - 特征提取 - 主成分分析 (PCA)

鋒哥原創的Scikit-learn Python機器學習視頻教程&#xff1a; 2026版 Scikit-learn Python機器學習 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程主要講解基于Scikit-learn的Python機器學習知識&#xff0c;包括機器學習概述&#xff0c;特征工程(數據…