golang字符串缩写与格式化插件abbreviate的使用

Golang字符串缩写与格式化插件abbreviate的使用

abbreviate是一个Golang库,用于使用常见缩写来缩短字符串长度,特别适用于处理资源名称(如AWS堆栈名称)过长的场景。

安装方法

go get github.com/dnnrly/abbreviate
make build

使用示例

abbreviate提供了多种命令来处理字符串缩写和格式化:

package main

import (
	"fmt"
	"github.com/dnnrly/abbreviate/abbreviate"
)

func main() {
	// 创建缩写器
	abbr := abbreviate.NewAbbreviator(abbreviate.DefaultOptions)

	// 使用原始分隔符缩写
	result, _ := abbr.Abbreviate("strategy-limited", "original")
	fmt.Println(result) // 输出: stg-ltd

	// 使用驼峰式缩写
	result, _ = abbr.Abbreviate("StrategyLimited", "camel")
	fmt.Println(result) // 输出: strategyLimited

	// 使用kebab-case缩写
	result, _ = abbr.Abbreviate("StrategyLimited", "kebab")
	fmt.Println(result) // 输出: stg-ltd

	// 使用自定义分隔符
	opts := abbreviate.Options{
		Separator: "+",
	}
	customAbbr := abbreviate.NewAbbreviator(opts)
	result, _ = customAbbr.Abbreviate("StrategyLimited", "separated")
	fmt.Println(result) // 输出: stg+ltd

	// 限制最大长度
	opts = abbreviate.Options{
		MaxLength: 11,
	}
	lengthAbbr := abbreviate.NewAbbreviator(opts)
	result, _ = lengthAbbr.Abbreviate("strategy-limited", "original")
	fmt.Println(result) // 输出: strategy-ltd

	// 从字符串前端开始缩写
	opts = abbreviate.Options{
		MaxLength:   11,
		FromFront:   true,
	}
	frontAbbr := abbreviate.NewAbbreviator(opts)
	result, _ = frontAbbr.Abbreviate("strategy-limited", "original")
	fmt.Println(result) // 输出: stg-limited
}

主要功能

abbreviate提供以下命令:

  • original: 使用原始单词边界分隔符进行缩写
  • camel: 缩写并转换为驼峰式
  • kebab: 缩写并转换为kebab-case
  • pascal: 缩写并转换为PascalCase
  • snake: 缩写并转换为snake_case
  • separated: 使用自定义分隔符进行缩写

选项参数

abbreviate支持以下选项:

  • --custom: 自定义缩写集
  • --from-front: 从字符串前端开始缩写
  • --language: 选择语言(默认"en-us")
  • --max: 字符串的最大长度限制
  • --set: 缩写集(默认"common")
  • --strategy: 缩写策略(默认"lookup")

使用场景

这个工具特别适用于需要缩短资源名称的场景,例如:

  • AWS堆栈命名
  • Kubernetes资源命名
  • 数据库表名或列名
  • 变量命名

通过使用常见缩写,可以在保持名称可读性的同时缩短长度。


更多关于golang字符串缩写与格式化插件abbreviate的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang字符串缩写与格式化插件abbreviate的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang 字符串缩写与格式化插件 abbreviate 使用指南

abbreviate 是一个用于字符串缩写和格式化的 Golang 库,它可以帮助你将长字符串转换为缩写形式,同时保持可读性。

安装

go get github.com/segmentio/abbreviate

基本用法

1. 简单缩写

package main

import (
	"fmt"
	"github.com/segmentio/abbreviate"
)

func main() {
	// 基本缩写
	str := "HyperText Markup Language"
	abbr := abbreviate.Abbreviate(str)
	fmt.Println(abbr) // 输出: HTML

	// 自定义分隔符
	str = "JavaScript Object Notation"
	abbr = abbreviate.Abbreviate(str, abbreviate.Options{Separator: "-"})
	fmt.Println(abbr) // 输出: J-S-O-N
}

2. 高级选项

func main() {
	// 自定义最小长度
	str := "Central Processing Unit"
	abbr := abbreviate.Abbreviate(str, abbreviate.Options{
		MinLength: 2, // 每个部分至少取2个字符
	})
	fmt.Println(abbr) // 输出: CePrUn

	// 保留原始大小写
	str = "JavaScript Object Notation"
	abbr = abbreviate.Abbreviate(str, abbreviate.Options{
		PreserveCase: true,
	})
	fmt.Println(abbr) // 输出: JSON

	// 限制最大长度
	str = "Representational State Transfer"
	abbr = abbreviate.Abbreviate(str, abbreviate.Options{
		MaxLength: 6,
	})
	fmt.Println(abbr) // 输出: REST
}

3. 自定义缩写映射

func main() {
	// 自定义缩写映射
	customAbbr := map[string]string{
		"HyperText":       "HT",
		"Markup":          "M",
		"Language":        "L",
		"Representational": "R",
		"State":           "S",
		"Transfer":        "T",
	}

	str := "HyperText Markup Language"
	abbr := abbreviate.Abbreviate(str, abbreviate.Options{
		CustomMap: customAbbr,
	})
	fmt.Println(abbr) // 输出: HTML

	str = "Representational State Transfer"
	abbr = abbreviate.Abbreviate(str, abbreviate.Options{
		CustomMap: customAbbr,
	})
	fmt.Println(abbr) // 输出: RST
}

4. 处理特殊字符

func main() {
	// 处理带特殊字符的字符串
	str := "Content-Type"
	abbr := abbreviate.Abbreviate(str)
	fmt.Println(abbr) // 输出: CT

	// 保留特殊字符作为分隔符
	str = "User-Agent"
	abbr = abbreviate.Abbreviate(str, abbreviate.Options{
		Separator: "-",
	})
	fmt.Println(abbr) // 输出: U-A
}

实际应用示例

1. 生成文件名缩写

func generateShortFilename(fullName string) string {
	return abbreviate.Abbreviate(fullName, abbreviate.Options{
		MaxLength:  8,
		Separator:  "_",
		MinLength:  1,
	})
}

func main() {
	filename := "userProfilePictureUploadService.go"
	shortName := generateShortFilename(filename)
	fmt.Println(shortName) // 输出: u_P_P_U_S.go
}

2. 数据库字段名转换

func dbFieldName(displayName string) string {
	return strings.ToLower(abbreviate.Abbreviate(displayName))
}

func main() {
	field := "Customer Identification Number"
	dbName := dbFieldName(field)
	fmt.Println(dbName) // 输出: cin
}

注意事项

  1. 默认情况下,abbreviate 会取每个单词的首字母
  2. 可以通过选项自定义缩写行为
  3. 对于已经常见的缩写(如 HTML、JSON),库会优先使用这些标准缩写
  4. 处理特殊字符时,默认会将它们视为单词分隔符

abbreviate 是一个轻量级但功能强大的字符串处理库,特别适合需要生成缩写或简化长字符串的场景。通过灵活配置选项,可以满足各种不同的缩写需求。

回到顶部