package
0.0.0-20241124143409-ba965f148eb9
Repository: https://github.com/joakim-ribier/go-utils.git
Documentation: pkg.go.dev
# README
go-utils
slices utils
A few examples on the "slices" package.
string
FilterByNonEmpty
slicesutil.FilterByNonEmpty([]string{"1", "", "3", ""})
// Result: [1 3]
FindNextEl
slicesutil.FindNextEl([]string{"1", "2", "3", "4"}, "2")
// Result: 3
T
users := []User{
{Id: 1, Name: "Name 1", Age: 1},
{Id, 2, Name: "Name 2", Age: 2},
{Id: 3, Name: "Name 3", Age: 3}}
FilterT
var filteredUsers []User
for _, user := range users {
if user.Age > 1 {
filteredUsers = append(filteredUsers, user)
}
}
// new way
filteredUsers = slicesutil.FilterT[User](users, func(u User) bool {
return u.Age > 1
}) // Result: [{2 2 Name 2} {3 3 Name 3}]
FindT
var foundUser *User
for _, user := range users {
if user.Age == 2 {
foundUser = &user
break
}
}
// new way
foundUser = slicesutil.FindT[User](users, func(u User) bool {
return u.Age == 2
}) // Result: &{2 2 Name 2}
TransformT
var names []string
for _, user := range users {
names = append(names, user.Name)
}
// new way
names = slicesutil.TransformT[User, string](users, func(u User) (*string, error) {
return &u.Name, nil
}) // Result: [Name 1 Name 2 Name 3]
SortT
sort.SliceStable(users, func(i, j int) bool {
return users[i].Age > users[j].Age
})
// new way (clone and sort values)
users = slicesutil.SortT[User](getUsers(), func(u1, u2 User) (int, int)) {
return u1.Age, u2.Age
}) // Result: [{1 1 Name 1} {2 2 Name 2} {3 3 Name 3} ]
ToStringT
var names []string
for _, user := range users {
names = append(names, user.Name)
}
str := strings.Join(names, ", ")
// new way
str = slicesutil.ToStringT[User](users, func(u User) *string {
return &u.Name
}, ", ") // Result: Name 1, Name 2, Name 3