goo

package module
v1.1.32 Latest Latest
Warning

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

Go to latest
Published: Nov 8, 2025 License: MIT Imports: 10 Imported by: 0

README

🍴 Goo

Go codecov Go Report Card Go Reference Static Badge

一个实用的 Go 语言工具库,提供了一系列常用的辅助函数和工具类,简化日常开发工作。
👉️👉️👉️只用golang的内置包👈️👈️👈️

📦 安装

go get github.com/Flyingmn/goo

🚀 快速开始

package main

import (
    "fmt"
    "github.com/Flyingmn/goo"
)

func main() {
    // 使用goo包中的数组去重
    uniqueSlices := goo.ArrayUnique([]int{1, 2, 2, 8, 2, 9, 10, 10, 10})
    // 输出去重后的结果
    fmt.Println(uniqueSlices)

    // goo_test.go有完整的测试用例    
    fmt.Println("goo_test.go有完整的测试用例,请自助食用!!!")
}

📖 文档

完整的 API 文档请访问: pkg.go.dev/github.com/Flyingmn/goo

📎 模块信息

当前版本: v1.1.31

Go 版本要求: 1.18 或更高

🏗️ 项目结构

根据 Go 模块标准布局,该项目包含:


github.com/Flyingmn/goo/
├── go.mod          # 模块定义
├── go.sum          # 依赖校验
├── *.go            # 源代码文件
├── goo_test.go     # 👉️👉️👉️测试代码文件👀👀👀,请参考这里的代码使用
└── README.md       # 项目说明

🤝 贡献

欢迎提交 Issue 和 Pull Request!

Fork 本仓库

创建特性分支 (git checkout -b feature/AmazingFeature)

提交更改 (git commit -m 'Add some AmazingFeature')

推送到分支 (git push origin feature/AmazingFeature)

开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

👤 作者

Flyingmn

如果这个项目对您有帮助,请给个 ⭐️ 支持一下!

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AnyConvert2T

func AnyConvert2T[T any](v any, t T) T

断言 any 类型是否能转换为指定类型,如果是,返回断言后的结果,否则返回指定的值

func ArrayChunk

func ArrayChunk[T ~[]V, V any](s T, size int) []T

将一个切片分割成指定size长度的快,返回一个由块组成的切片

func ArrayColumn

func ArrayColumn[T ~[]M, M ~map[K]V, K comparable, V any](arr T, k K) []V

接收一个map的切片和一个key,返回所有map中key对应的value所组成的切片

func ArrayDiff

func ArrayDiff[T comparable](first []T, others ...[]T) []T

多个切片的差集,支持传入多个切片,返回第一个切片中不包含在任意一个切片中的元素。

func ArrayKeys

func ArrayKeys[T ~map[K]V, K comparable, V any](arr T) []K

接收一个map,返回map的所有key组成的切片

func ArrayPluck

func ArrayPluck[T ~[]M, M ~map[string]V, K string, V comparable](arr T, kName, vName string) map[V]V

接收一个map组成的切片,返回一个以指定key作为键,指定key作为值的新map

func ArrayReIndex added in v1.1.17

func ArrayReIndex[T ~[]M, M ~map[K]V, K comparable, V comparable](arr T, idx K) map[V]M

接收一个map的切片 从map中提取指定列的值重排切片的索引,返回一个以指定列的值为键,以原map为值的新map

func ArrayUnique

func ArrayUnique[T comparable](arr []T) []T

切片去重

func ArrayValues

func ArrayValues[T ~map[K]V, K comparable, V any](arr T) []V

接收一个map,返回map的所有val组成的切片

func ChunkExec added in v1.1.22

func ChunkExec[V any, R any](values []V, chunkNum int, f func(miniVals []V) ([]R, error)) (res []R, errs error)

分块执行一个func,支持设置分快大小;func遍历执行每个块

func ConcurrentWithLimit added in v1.1.18

func ConcurrentWithLimit[A, B any](data []A, limit int, processFunc func(A) B) []B

并发执行一个func,支持限制并发数,func遍历执行传入的slices的每个元素

func ConcurrentWithLimitRetErrs added in v1.1.25

func ConcurrentWithLimitRetErrs[A, B any](data []A, limit int, processFunc func(A) (B, error)) ([]B, error)

并发执行一个func,支持控制并发数以及错误返回,func遍历执行传入的slices的每个元素

func Difference added in v1.1.21

func Difference[T comparable](a, b []T) []T

获取两个切片的差集,切片A中存在但在切片B中不存在的元素所组成的切片

func DurationToChinese

func DurationToChinese(d time.Duration) string

时间转换为中文

func Each added in v1.1.20

func Each[T any, R any](arr []T, callback func(T, int) R) []R

遍历切片

func Empty

func Empty(v any) bool

判断any是否为空

func ErrJoin added in v1.1.31

func ErrJoin(errs ...error) error

拼接多个error

func GetMapWsDef

func GetMapWsDef[C comparable, V any, DV any](m map[C]V, key C, def DV) (DV, bool)

判断map类型的key是否存在,存在则转换为制定值的类型, 不存在或无法转换时返回指定的默认值

func GetMapWsDefWsOutOk added in v1.1.15

func GetMapWsDefWsOutOk[C comparable, V any, DV any](m map[C]V, key C, def DV) DV

判断map类型的key是否存在,存在则转换为制定值的类型, 不存在或无法转换时返回指定的默认值

func Intersection added in v1.1.21

func Intersection[T comparable](a, b []T) []T

两个切片取交集

func IsFloat

func IsFloat(data any) bool

判断any是否为float类型

func IsInteger

func IsInteger(data any) bool

判断any是否为数字类型

func IsMap

func IsMap(data any) bool

判断any是否为map

func IsNumZero

func IsNumZero(v any) bool

判断变量是否为0,只有数字类型才可能返回true

func IsNumeric

func IsNumeric(data any) bool

isNumeric 使用 reflect 判断给定的 interface{} 类型是否为数字类型

func IsSet

func IsSet[C comparable, V any](m map[C]V, key C) bool

判断map类型的key是否存在

func IsStruct

func IsStruct(data any) bool

判断any是否为struct

func JsonMarshalIndent added in v1.1.12

func JsonMarshalIndent(jsonData string) string

格式化json字符串, 带缩进

func MapMerge

func MapMerge[K comparable, V any](maps ...map[K]V) map[K]V

合并多个map

func MarshalJson

func MarshalJson(v any) string

any转换为json字符串,忽略错; 字符串的any会直接返回字符串,如果报错会返回空字符串

func Md5

func Md5(input string) string

返回一个字符串的md5值

func ParseGormColumnTag added in v1.1.14

func ParseGormColumnTag(tag reflect.StructTag) (columnName string, hasColumn bool)

ParseGormColumnTag 解析 gorm 标签中的 "column" 属性

func RandomIntInRange added in v1.1.18

func RandomIntInRange(min, max int) int

func SafeDivide

func SafeDivide[T Number](numerator, denominator T) (T, error)

安全的除法, 除数为0返回0和错误

func SliceShuffle

func SliceShuffle[T any](arr []T) []T

切片随机打乱

func StructKeys added in v1.1.14

func StructKeys[T any](s T) ([]string, error)

接收一个结构体,返回结构体的字段名所组成的切片; 优先取tag中gorm的column标签,如果gorm明示-,则跳过, 如果没有则取json, 如果json明示-, 则跳过, 如果没有,则跳过; 如果没有gorm和json,并且也没有标示 - 则取字段名 可以接受结构体或结构体指针

func StructsColumn

func StructsColumn[T any, V any](structs []T, kefFunc func(T) V) []V

接收一个结构体切片和一个以结构体为参数的函数,返回所有结构体执行函数后的返回值所组成的切片

func StructsPluck added in v1.1.17

func StructsPluck[T any, K comparable, V any](slice []T, kvFunc func(T) (K, V)) map[K]V

接收一个struct组成的切片和一个以struct为入参的func,func返回两个参数;返回一个以func返回的第一个值为key,以func返回的第二个值为value的map

func StructsReIndex added in v1.1.17

func StructsReIndex[T any, K comparable](slice []T, keyFunc func(T) K) map[K]T

ArrayReIndex的struct版本

func SymmetricDifference added in v1.1.21

func SymmetricDifference[T comparable](a, b []T) []T

两个切片的对称差,返回两个切片中不重复的元素集合,即会移除两个切片中都存在的元素。

func TimeString2Time

func TimeString2Time(t string) time.Time

时间字符串转为time.Time;YYYY-MM-DD H:i:s -> time.Time

func TimeString2Unix

func TimeString2Unix(t string) int64

时间字符串转为unix时间戳;YYYY-MM-DD hh:mm:ss -> unix, YYYY-MM-DD -> unix

Types

type Number

type Number interface {
	int | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | float32 | float64
}

Jump to

Keyboard shortcuts

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