https://github.com/wanglihui/slicer
golang generate slice Map Filter GroupBy OrderBy and so on
https://github.com/wanglihui/slicer
array go golang slice utils
Last synced: about 1 month ago
JSON representation
golang generate slice Map Filter GroupBy OrderBy and so on
- Host: GitHub
- URL: https://github.com/wanglihui/slicer
- Owner: wanglihui
- License: gpl-3.0
- Created: 2021-12-13T13:01:53.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2022-01-07T12:26:50.000Z (about 4 years ago)
- Last Synced: 2025-03-21T08:46:46.136Z (11 months ago)
- Topics: array, go, golang, slice, utils
- Language: Go
- Homepage:
- Size: 27.3 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# slicer
[中文说明](./README_CN.md)
use go generate to generate slice helper code. like map, find, groupby, orderby, find, first and so on .
### Usage
```golang
//go:generate go run github.com/wanglihui/slicer -type PackageItem
```
- type is struct type
```bash
go generate ./...
```
now go generate output code like
you can use Map Find Filter OrderBy and so on...
```golang
// packageitem_slice.gen.go
package packageitem
type PackageItem interface{}
type PackageItemSlice []PackageItem
type PackageItemFilterFn func(item PackageItem, idx int) bool
func (items PackageItemSlice) Filter(fn PackageItemFilterFn) PackageItemSlice {
rets := make(PackageItemSlice, 0)
for idx, item := range items {
if b := fn(item, idx); b {
rets = append(rets, item)
}
}
return rets
}
func (items PackageItemSlice) OrderBy(fn PackageItemCompareFn) PackageItemSlice {
return _PackageItemQuickSort(items, 0, len(items)-1, fn)
}
type PackageItemFindFn func(item PackageItem) bool
func (items PackageItemSlice) Find(fn PackageItemFindFn) *PackageItem {
for _, item := range items {
if b := fn(item); b {
return &item
}
}
return nil
}
// and so on
```
```golang
//main.go
// Map
PackageItemSlice.Map(func(item PackageItem) interface{} {
return item.Name
})
// Find one
item := PackageItemSlice.Find(func(item PackageItem) *PackageItem {
return &item.Age > 10
})
// Filter
items := PackageItemSlice.Filter(func(item PackageItem) bool {
return item.Age < 10
})
```