strutils

package module
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2024 License: MIT Imports: 25 Imported by: 1

README

本仓库只干一件事, 就是只做 go 语言中的字符串相关的实用函数或者方法, 当然是官方库 https://pkg.go.dev/strings 中未实现的,官方已有的实现我们不重复造轮子!

欢迎大家踊跃 PR,一起完善这个工具库!

如果你喜欢,请帮忙点亮免费小红星,您的小红星就是我们持续更新的动力!

目前已完成函数

  1. 各种命名转换函数 naming_convert.go 包括:
  • CamelStr 大驼峰 单词全部首字母大写 如: UserName

  • SmallCamelStr 小驼峰 第一个单词首字母小写,其他大写, 如: userName

  • SnakeStr 单词全部小写,使用下划线链接, 如: user_name

  • KebabStr 单词全部小写,使用 中划线链接 如: user-name

  1. 字符串过滤函数 filters.go
  • Html2str html 字符串过滤函数,过滤所有 script,style 内容, 其他所有<*>中的内容, 将 1 个以上的换行回车空格替换为 1 个空格
  1. 字符串操作函数 handle.go
  • Substr 截取指定长度的字符串,支持英文,中文和其他多字节字符串
  1. Regexp 编译缓存 cache_regexp.go
  1. 字符串条件判断相关函数 condition.go
  • StrIsChinese 判断字符串是否是中文
  • StrContainsChinese 是否包含中文
  • StrContainsContinuousNum 是否包含连续的数字 可自定义连续数字的长度,默认 2

更多的函数使用方法请参考 PKG 文档: https://pkg.go.dev/github.com/tekintian/strutils#pkg-index

使用方法

go 版本环境, 最低 1.16, 我们建议你使用官方最新正式版, 这样就可以使用很多高级特性,比如 1.21 版本以上中的 slices 内置包等......

  • 安装最新版本依赖
go get -u github.com/tekintian/strutils
  • 使用示例
import (
	"fmt"
	"github.com/tekintian/strutils"
)

func main() {
  camelStr := strutils.CamelStr("hello-world")
  fmt.Println(camelStr) // 输出: HelloWorld
}

其他使用示例可参考 *_test.go 中的测试用例, 我们的每个函数都有测试用例, 部分函数还使用了 Fuzz 模糊测试技术 来确保我们函数的可靠和高效! 同时也能帮助我们发现一些潜在的风险等......

也可参考 go pkg 文档,地址: https://pkg.go.dev/github.com/tekintian/strutils

go 编码规范

每个函数需要有对应的测试函数,以确保函数的可靠性, 编码规范请参考 go 官方的 Effective Go
Effective Go 国内加速地址

go 参考文档

Go 语言内置包 strings 文档 https://pkg.go.dev/strings

Go 程序设计语言规范 https://go.dev/ref/spec

Fuzzing 模糊测试官方使用文档 https://go.dev/security/fuzz

golang官方文档 国内加速版本: https://golang.google.cn/doc/

Documentation

Overview

+build go1.18 字符串相关函数集合工具库,支持各种字符串相关的函数,包括字符串转换,字符串处理,字符串判断等. 泛型的字符串相关转换函数 这里仅支持go版本大于等于1.18的go运行环境,因为只有go版本大于等于1.18才支持泛型 @author: [email protected] @see https://dev.tekin.cn

JSON 相关工具函数

naming conventions utils 命名转换相关实用函数 @author [email protected]

path路径相关工具函数

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AbsPathify added in v1.3.0

func AbsPathify(inPath string) string

获取inPath的绝对路径 会替换路径中的变量 ${var} 或者 $var 为环境变量的值

func AnyIsBlank added in v1.3.0

func AnyIsBlank(val interface{}) bool

使用放射判断 val是否为空(零值) 可判断 val 对象是否为零值, 包含时间类型对象的零值 是零值返回 true 否则返回 false; 空字符串,number类型 0 , 引用类型 nil,时间类型空值 都返回true @author tekintian <[email protected]>

func AnyToStr

func AnyToStr(value interface{}) string

AnyToStr 返回any类型的数据的字符串 nil数据返回空字符串, 数组,切片 返回以空格分隔的值, map类型的数据返回以空格分隔的 k:v , 如果value是Time对象,则默认使用 time.RFC3339 格式化时间返回 实现了Stringer接口的结构体调用 String返回字符串, 字符串类型的直接返回字符串 其他类型全部使用 fmt.Sprintf("%v",value) 返回字符串

func AppendFile added in v1.3.0

func AppendFile(fname string, data []byte) error

AppendFile 插入文件内容.若文件不存在,则自动创建.

func CamelStr

func CamelStr(str string) string

大驼峰命名 单词首字母大写 下划线或者中划线链接的字符串转换为首字母大写的字符串

func Capitalize

func Capitalize(s string) string

将字符串s中所有单词的第一个字母转换为大写 @author tekintian <[email protected]>

func CaseCamel

func CaseCamel(str string) string

大驼峰 CamelStr的别名

func CaseCamelLower

func CaseCamelLower(str string) string

小驼峰 SmallCamelStr的别名

func Contains

func Contains(haystack, needle string, startOffset ...int) int

判断字符串haystack是否包含子串needle 可以指定偏移位置 返回索引位置 -1 不包含,其他包含

func ContainsAny

func ContainsAny(s string, runes ...rune) bool

字符串包含检查 runes 这个为你要检查的字符串rune 可以是多个,只要有一个包含即返回true

func ContainsWhiteSpace

func ContainsWhiteSpace(s string) bool

检测字符串是否包含空白字符

func ConvertWrodsFirstUpperLower

func ConvertWrodsFirstUpperLower(s, sep string, isUpper bool) string

转换字符串中单词的首字母大小写

	s 待转换的字符串
	sep 单词分隔符 如果指定了分隔符且不为空同时字符串中包含指定分隔符,则返回的字符串中的单词将会带上这个分隔符,否则分隔符全部会被设置为空
    isUpper 是否转换为大写 true 是, false 否(转换为小写)

使用示例:

ConvertWrodsFirstUpperLower("hello word","",true) // HelloWorld
ConvertWrodsFirstUpperLower("Hello Word"," ",false) // hello world

返回转换后的字符串

func DirMustExist added in v1.3.0

func DirMustExist(path string, perms ...fs.FileMode) error

确保给定的路径的目录存在,如果不存在则自动创建对应目录 默认目录权限标识 0777

path  要判断是否存在的路径
perms 目录权限标识  默认 0777可任意读写, 可自行指定 如 0755,  0666等

如果目录创建失败在返回相关的异常信息,否则返回nil

func GbkToUtf8

func GbkToUtf8(s []byte) ([]byte, error)

gbk to utf8 encoding conversion

func GenRandIntStr added in v1.3.0

func GenRandIntStr(width uint) string

生成指定位数的随机数字字符串

func GenRandStr added in v1.3.0

func GenRandStr(width uint) string

生成指定位数的随机字符

func GetAppPath added in v1.3.0

func GetAppPath() string

获取当前app的运行路径 如: /opt/app/gotms

func GetDirSize added in v1.3.0

func GetDirSize(fname string) int64

DirSize 获取目录大小(bytes字节).

func GetFileEnvStr added in v1.3.0

func GetFileEnvStr(filename string) (string, error)

获取文件内容数据并将文件内容中的变量替换为环境变量 filename 要读取的文件路径,相对于当前项目根目录的相对路径 或者绝对路径 返回使用os.ExpandEnv将文件内容中的变量替换为环境变量的值后返回

func GetFileExt added in v1.3.0

func GetFileExt(fname string) string

GetExt 获取文件的小写扩展名,不包括点. 如: fname为 xxxx.jpg 则返回 jpg

func GetFileMime added in v1.3.0

func GetFileMime(fname string, fast bool) string

GetMime 获取文件mime类型;fast为true时根据后缀快速获取;为false时读取文件头获取.

func GetFileMode added in v1.3.0

func GetFileMode(fname string) (os.FileMode, error)

GetFileMode 获取路径的权限模式.

func GetFileSize added in v1.3.0

func GetFileSize(fname string) int64

GetFileSize 获取文件大小(bytes字节);注意:文件不存在或无法访问时返回-1 .

func GetRegexp

func GetRegexp(pattern string) (*regexp.Regexp, error)

返回 `pattern` 对应的 *regexp.Regexp 对象, 使用原子级别缓存,绝对线程安全!

func GetRemoteFileSize added in v1.3.0

func GetRemoteFileSize(furl string) (int64, error)

获取远程要下载的文件的大小

func GetUuid

func GetUuid() string

GetUuid 获取36位UUID RFC4122

func Html2str

func Html2str(htmlStr string) string

Html过滤 过滤所有script,style内容, 其他所有<*>中的内容, 将1个以上的换行回车空格替换为1个空格 @author: tekintian <[email protected]>

func Index

func Index(slice []string, item string) int

字符串索引位置查找,找到返回对应的索引位置, 未找到返回 -1

func IsASCII added in v1.2.0

func IsASCII(str string) bool

判断字符串是否是ASCII字符串

func IsBase64Str

func IsBase64Str(str string) bool

JudgeBase64 别名

func IsBinaryFile added in v1.3.0

func IsBinaryFile(fname string) bool

IsBinaryFile 是否二进制文件(且存在) fname 要判断的文件名 包含路径 是二进制文件 返回 true , 否则返回false @author tekintian <[email protected]>

func IsDir added in v1.3.0

func IsDir(fname string) bool

IsDir 判断给定的文件是否是目录 是 true 否则 false (包括文件不存在等都是false)

func IsEmptyDir added in v1.3.0

func IsEmptyDir(path string) bool

检查指定的路径是否为空 即指定的文件夹下没有文件

func IsEmptyStringOrWhiteSpace

func IsEmptyStringOrWhiteSpace(s string) bool

判断字符串是否为空或者是空白字符

func IsExist added in v1.3.0

func IsExist(path string) int8

判断给定的文件/路径是否存在 返回数字 0 表示不存在; 1 目录存在; 2 文件存在; -1 表示path为空

path 要检测是否存在的路径 文件夹或者文件路径, 如果路径为空返回 -1

func IsFile added in v1.3.0

func IsFile(fname string) bool

IsFile 判断给定的文件是否是文件 是 true, 否则false (包括文件不存在等都是false)

func IsGbkData

func IsGbkData(data []byte) bool

判断数据是否是gbk编码

func IsGbkStr

func IsGbkStr(str string) bool

判断字符串是否是gbk编码

func IsImg added in v1.3.0

func IsImg(fname string) bool

IsImg 是否图片文件(仅检查后缀).

func IsLink(fpath string) bool

IsLink 判断给定的文件是否是软链接

func IsUrl added in v1.2.0

func IsUrl(str string) bool

IsUrl 字符串是否URL 优先通过url长度,基本规则和协议进行否点判断,最后通过正则进行判断

func IsValidUrl

func IsValidUrl(urlStr string, schemes ...string) bool

验证是否有效的URL

func IsWmMatching added in v1.2.0

func IsWmMatching(str string, pattern string) bool

通配符 * 问号 ? 匹配, 找出给定的输入字符串str是否与pattern字符串模式相匹配。

	IsWmMatching  wildcard and mask pattern matching
 str 要进行匹配的输入字符串
 pattern 字符串匹配模式

		通配符 星号'*' -> 星号匹配零个或多个字符。
		问号'?' -> 匹配任何单个字符。

如果str与pattern相匹配,则返回true, 否则返回false

func IsWmMatchingReg added in v1.2.0

func IsWmMatchingReg(str, pattern string) bool

星号模式匹配* 和问号模式匹配 ,将模式匹配字符串转换为正则后使用正则进行匹配 这个的作用和上面的IsWmMatching 是一样的, 只不过这个函数采用的是正则方式进行模式匹配

func JsonDataScan added in v1.3.0

func JsonDataScan(data []byte, dest interface{}) error

利用JSON decoder扫描data数据到 dest 注意这里的 data是JSON字符串的[]byte切片 dest 是用来接收json data的指针对象, 可以是map 或者自定义结构体, 注意json中字段的类型需要和接收对象的字段的数据类型一致, 除非是interface{} 另外这里json解码后会将int64类型数据转换为json number类型 而不是默认的 float64类型.

func JsonStrToStruct

func JsonStrToStruct(m string, dst interface{}) error

JsonStrToStruct 反序列化字符串并赋值给对应结构体

func JudgeBase64

func JudgeBase64(str string) bool

判断字符串是否是base64字符 可准确判断是或者否 纯数字被视为非base64字符

Base64规定: 4 个 Base64 字符表示 3 个二进制字节,因为:64 * 64 * 64 * 64 = 256 * 256 * 256。 因为,Base64 将三个字节转化成四个字节,因此 Base64 编码后的文本,会比原文本大出三分之一左右。 Base64共有65个字符,他们分别是: 大写字母 A-Z、小写字母 a-z、数字 0-9、符号 "+"、"/"(再加上作为垫字的 "=", 垫字是当生成的 Base64 字符串的个数不是 4 的倍数时,添加在尾部的字符),作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。 @author: TekinTian <[email protected]> @see https://dev.tekin.cn/

func KebabStr

func KebabStr(str string) string

kebab 所有字母小写,使用中划线 - 链接

func LcFirst

func LcFirst(str string) string

首字母小写 Lower case first letter

func NumberFormat added in v1.2.0

func NumberFormat(number float64, decimal uint8, point, thousand string) string

NumberFormat 以千位分隔符方式格式化一个数字. decimal为要保留的小数位数,point为小数点显示的字符,thousand为千位分隔符显示的字符. 有效数值是长度(包括小数点)为17位之内的数值,最后一位会四舍五入.

func ParseNumberStr

func ParseNumberStr(str string) string

使用正则从字符串中解析数字, 支持小数和使用了,分隔的数字的匹配 如 123,456 获取的结果为 123456; abc12.88def 返回 12.88

func ParseStrsToMapStrStrSlice added in v1.3.0

func ParseStrsToMapStrStrSlice(strs []string, options ...string) map[string][]string

解析字符串切片 到 map[string][]string 这个的应用场景通常是对权限验证字符串进行切割和转换

	strs 要进行切割转换的字符串切片 , 如: []string{"/api/login:GET,POST"}
	options 字符串切割可选项,可以传3个可选项参数:
	 	第一个是字符串的key和值的分隔符 默认 分号 :
		第二个是第一个分割后的值的分隔符, 默认 逗号 ,
 	第二个是分割后的key/val值的trim 字符, 默认 空格

 返回 map[string][]string  如: mps["/api/login"]=[]string{"GET","POST"}

@author tekintian <[email protected]>

func ReplaceString

func ReplaceString(pattern, replace, src string) (string, error)

正则查找替换字符串

func ReverseStr

func ReverseStr(str string) string

反转字符串 支持所有字符串的反转 中英文符号等都支持

str 要进行反转的字符串

返回反转后的字符串 @author: TekinTian <[email protected]>

func ReverseStrTpl

func ReverseStrTpl(temp, str string, res map[string]interface{})

反转字符串模板

func SafeString

func SafeString(in string) string

转换字符串为go语言中安全的命名样式, 即英文字母或者数字与 _ 组合,不能以数字开头 SafeString会将所有的非字母或者数字全部转换为_ 如果是数字开头则转换为_数字, 如123abc 转换为 _123abc

func SmallCamelStr

func SmallCamelStr(str string) string

小驼峰命名 第一个单词首字母小写,其他首字母大写

func SnakeStr

func SnakeStr(str string) string

即将单词首字母小写, 多个单词使用下划线链接, 如 UserName 转换为 user_name

func Str2Float32

func Str2Float32(str string) float32

字符串转 float32

func Str2Float64

func Str2Float64(str string) float64

字符串转 float64

func Str2Int

func Str2Int(str string) int

字符串转int

func Str2Int64

func Str2Int64(str string) int64

字符串转int64

func Str2Int64Slice

func Str2Int64Slice(str string, seps ...string) []int64

字符串转int64切片 str 要转换的字符串 如: "123,456" seps 可选参数, 字符串中的切割分隔符,默认 逗号, 可以自行根据要切割转换的字符串指定 返回按照指定的sep分隔符切割转换后的 int64切片

func Str2IntSlice

func Str2IntSlice(str string, seps ...string) []int

字符串转int切片 str 要转换的字符串 如: "123,456" seps 可选参数, 字符串中的切割分隔符,默认 逗号, 可以自行根据要切割转换的字符串指定 返回按照指定的sep分隔符切割转换后的 int切片

func Str2Uint

func Str2Uint(str string) uint

字符串转uint

func Str2Uint64 added in v1.3.0

func Str2Uint64(str string) uint64

字符串转uint64

func Str2UintSlice

func Str2UintSlice(str string, seps ...string) []uint

字符串转uint切片 str 要转换的字符串 如: "123,456" seps 可选参数, 字符串中的切割分隔符,默认 逗号, 可以自行根据要切割转换的字符串指定 返回按照指定的sep分隔符切割转换后的 uint切片

func StrContainsChinese

func StrContainsChinese(str string) bool

判断字符串是否包含中文字符

func StrContainsContinuousNum

func StrContainsContinuousNum(str string, minCs ...uint16) bool

判断字符串是否包含连续的数字, minCs 最小连续数字的长度,默认 2

func StrGbkToUtf8

func StrGbkToUtf8(str string) (string, error)

字符串编码 gbk到utf8转换

func StrInSlice added in v1.3.0

func StrInSlice(a string, list []string) bool

判断字符串a是否在list切片中

func StrIndex

func StrIndex(str, substr string) int

字符串 子串索引 获取

func StrIsChinese

func StrIsChinese(str string) bool

判断字符串是否是中文字符串

func StrIsNumber

func StrIsNumber(str string) bool

判断字符串str是否为数字 整数或者浮点数都算是数字

func StrSplitAndTrim

func StrSplitAndTrim(str, sep string, cutsets ...string) []string

切割并清理字符串, 返回非空的字符串切片

str 要处理的字符串
sep 房子付出的分隔符
 cutsets 可选参数 要清理的字符串 默认 空格

返回切割后非空的字符串切片

func StrToFloat64

func StrToFloat64(str string) float64

字符串到 float64 转换

func StrToInt

func StrToInt(str string) int

字符串到 int 转换

func StrToInt64

func StrToInt64(str string) int64

字符串到 int64 转换

func StrToNumber

func StrToNumber[T iNumber](str string, defVal T) T

泛型字符串转数字, 返回的类型为defVal对应的类型,如果转换失败,则返回默认值 支持将字符串转换为go中所有的intx,uintx,floatx的数字类型

func StrToUint

func StrToUint(str string) uint

字符串到 uint 转换

func StrToUint64

func StrToUint64(str string) uint64

字符串到 uint64 转换

func StrUtf8ToGbk

func StrUtf8ToGbk(str string) (string, error)

字符串编码 utf8到gbk转换

func Substr

func Substr(str string, start int, lengths ...int) string

截取指定长度的字符串 支持中文截取

	start 开始截取的字符索引位置,从0开始
	lengths 要截取的字符长度 可选参数, 默认从开始位置一直截取到字符串的末尾

 如: Substr("你好go语言!",2,4) 返回 "go语言"
		Substr("Hello world",6,5) 返回 "world"

返回截取后的字符串

func Substr2

func Substr2(str string, start int, length ...int) string

Substr2 字符串截取 返回截取后的字符串 支持多字节字符 start 为起始位置.若值是负数,返回的结果将从 str 结尾处向前数第 abs(start) 个字符开始. length 为截取的长度.若值时负数, str 末尾处的 abs(length) 个字符将会被省略. start/length的绝对值必须<=原字符串长度.

func TimeToStr

func TimeToStr(tval interface{}, layouts ...string) string

TimeToStr 转换 时间字符串/时间戳/时间对象 到字符串 tval 要转换的时间对象, 时间戳(支持秒和毫秒), 时间字符串(注意,如果时间格式非默认的格式,需要指定时间格式) layouts 可选的时间格式

	默认输出字符串格式 "2006-01-02T15:04:05Z07:00",
	默认tval字符串对应的时间格式 "2006-01-02 15:04:05"

layouts可以传递多个时间格式参数,
	第一个为最终返回的字符串格式,默认"2006-01-02T15:04:05Z07:00"
	第二个为源格式(tval字符串对应的时间格式),默认"2006-01-02 15:04:05",仅tval为字符串时有效,
		还会自动尝试格式 time.RFC3339, 2006年01月02日15:04:05

时间字符串 @author tekintian <[email protected]> @see https://dev.tekin.cn

func Title

func Title(s string) string

将字符串中所有单词的第一个字母转换为大写

func TrimAppPath added in v1.3.0

func TrimAppPath(inPath string) string

去除当前app的路径(如果包含)返回相对路径, 否则原样返回

func TrimWhiteSpace

func TrimWhiteSpace(s string) string

去除字符串中的空白字符包含 回车 换行 制表符等, 注意是字符串中的所有的空白符全部去除

func TsToStr added in v1.1.0

func TsToStr(ts int64, layout string) string

格式化时间戳到字符串 ts 时间戳 支持秒 10位, 毫秒 13位 layout 时间格式 如果为空,则默认使用 time.RFC3339 作为格式 "2006-01-02T15:04:05Z07:00" 格式后的时间字符串

func UcFirst

func UcFirst(str string) string

首字母大写 Upper case first letter

func UcWords

func UcWords(str string) string

将每个单词的首字母转大写 str待转换的字符串 默认分隔空格和下划线链接的字符串, 下划线会被转换为空额输出

func UnTitle

func UnTitle(s string) string

将字符串中所有单词的第一个字母转换为小写

func Utf8ToGbk

func Utf8ToGbk(s []byte) ([]byte, error)

utf8 to gbk encoding conversion

func WriteFile added in v1.3.0

func WriteFile(fname string, data []byte, perms ...os.FileMode) error

WriteFile 将内容写入文件 自动创建相关目录 fpath为文件路径;data为内容;perm为权限,默认为0655.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL