开源一个轻量级 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;特征工程(数据…