{"id":13786661,"url":"https://github.com/kazu/loncha","last_synced_at":"2026-01-11T22:57:14.539Z","repository":{"id":37985429,"uuid":"173240836","full_name":"kazu/loncha","owner":"kazu","description":"fast slice utility for golang","archived":false,"fork":false,"pushed_at":"2022-07-21T20:43:21.000Z","size":237,"stargazers_count":11,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T15:11:12.014Z","etag":null,"topics":["golang","slice"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kazu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"kazu"}},"created_at":"2019-03-01T05:34:28.000Z","updated_at":"2025-03-21T04:57:08.000Z","dependencies_parsed_at":"2022-08-26T17:22:16.010Z","dependency_job_id":null,"html_url":"https://github.com/kazu/loncha","commit_stats":null,"previous_names":["kazu/lonacha"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazu%2Floncha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazu%2Floncha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazu%2Floncha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazu%2Floncha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kazu","download_url":"https://codeload.github.com/kazu/loncha/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250435113,"owners_count":21430219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","slice"],"created_at":"2024-08-03T19:01:27.417Z","updated_at":"2026-01-11T22:57:14.508Z","avatar_url":"https://github.com/kazu.png","language":"Go","readme":"# loncha\n[![Build Status](https://github.com/kazu/loncha/actions/workflows/go.yml/badge.svg)](https://github.com/kazu/loncha/actions/workflows/go.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/kazu/loncha)](https://goreportcard.com/report/github.com/kazu/loncha)\n[![codecov](https://codecov.io/gh/kazu/loncha/branch/master/graph/badge.svg)](https://codecov.io/gh/kazu/loncha)\n[![GitHub go.mod Go version of a Go module](https://img.shields.io/github/go-mod/go-version/gomods/athens.svg)](https://github.com/kazu/loncha)\n[![GitHub release](https://img.shields.io/github/v/release/kazu/loncha.svg)](https://github.com/kazu/loncha)\n\n\n\nA high-performance slice Utilities for Go.\n* high-performance slice filter/finder.\n* linked-list generics template using [Gennry]\n\n## Installation\n\n### slice Utility \n\n    go get github.com/kazu/loncha\n\n## QuickStart \n\n### slice Utility\n\nslice utility dosent use reflect/interface operation.\n\n```go\n    import \"github.com/kazu/loncha\"\n\n    type GameObject struct {\n        ID int\n        Name string\n        Pos []float\n    }\n\n    ...\n\n    var objs []GameObject\n\n```\n\nfind object from slice\n\n```go\n\n    loncha.Find(\u0026objs, func(i int) bool {\n        return objs[i].ID == 6\n    } \n```\n\nfilter/delete object via condition function\n\n```go\n\n    loncha.Filter(\u0026objs, func(obj *GameObject) bool {\n        return obj.ID == 12\n    } \n\n\tloncha.Delete(\u0026objs, func(i int) bool {\n\t\treturn objs[i].ID == 555\n\t})\n```\n\nselect object with condition function\n\n```go\n\n    // find one object with conditions.\n    obj, err := Select(\u0026objs, func(i int) bool {\n\t\treturn slice[i].ID \u003c 50\n\t})\n```\n\nshuffle slice \n\n```go\n    err = loncha.Shuffle(objs, 2)\n\n    loncha.Reverse(objs)\n```\n\n\ngot intersection from two slices\n\n\n```go\n    var obj2 []GameObject\n    intersectedObj := InsertSect(obj, obj2)\n\n\n    sort.Slice(objs, func(i int) bool {\n        return objs[i].ID \u003e=  objs[j].ID \n    })\n    sort.Slice(objs2, func(i int) bool {\n        return objs[i].ID \u003e=  objs[j].ID \n    })\n\n    intersect2 := IntersectSorted(obj, obj2, func(s []GameObject, i int) int {\n        return s[i].ID\n    })\n```\n\nsubtraction from two slices\n```go\n    subtractObj := Sub(obj, obj2)\n\n    subtract2 := SubSorted(obj, obj2, func(s []GameObject, i int) int {\n        return s[i].ID\n    })\n\n```\n\nReturns an object formed from operands via function\n\n\n```go\n\tslice1 := []int{10, 6, 4, 2}\n\n\tsum := Inject(slice1, func(sum *int, t int) int {\n\t\treturn *sum + t\n\t})\n```\n\n\n## generate double-linked list of linux kernel list_head type\n\ndefine base struct\n\n```\npackage game_object\n\nimport (\n    \"github.com/kazu/loncha/list_head\"\n\n\ntype Player struct {\n    ID int\n    Name string\n    Hp int\n    list_head.ListHead\n}\n```\n\ngenerate linked-list\n\n```console\n    $ go get go get github.com/cheekybits/genny\n    $ wget -q -O - \"https://github.com/kazu/loncha/master/container_list/list.go\" | genny  gen \"ListEntry=Player\" \u003e player_list.go\n    $ wget -q -O - \"https://github.com/kazu/loncha/master/container_list/list_test.go\" | genny  gen \"ListEntry=Player\" \u003e player_list_test.go\n```\n## benchmark Result\n\n\n### loncha.Uniq vs hand Uniq vs go-funk.Uniq\n```\nloncha.Uniq-16         \t    \t\t\t1000\t    997543 ns/op\t  548480 B/op\t   16324 allocs/op\nloncha.UniqWithSort-16 \t    \t\t\t1000\t   2237924 ns/op\t     256 B/op\t       7 allocs/op\nloncha.UniqWithSort(sort)-16         \t1000\t    260283 ns/op\t     144 B/op\t       4 allocs/op\nhand_Uniq-16                          \t1000\t    427765 ns/op\t  442642 B/op\t       8 allocs/op\nhand_Uniq_iface-16                    \t1000\t    808895 ns/op\t  632225 B/op\t    6322 allocs/op\ngo-funk.Uniq-16                       \t1000\t   1708396 ns/op\t  655968 B/op\t   10004 allocs/op\n```\n\n### loncha.Filter vs go-funk.Filter\n\n```\nloncha.Filter-16         \t     100\t     89142 ns/op\t   82119 B/op\t       4 allocs/op\nloncha.Filter_pointer-16 \t     100\t       201 ns/op\t       0 B/op\t       0 allocs/op\nhand_Filter_pointer-16   \t     100\t     24432 ns/op\t   81921 B/op\t       1 allocs/op\ngo-funk.Filter-16        \t     100\t   2370492 ns/op\t  640135 B/op\t   20004 allocs/op\ngo-funk.Filter_pointer-16        100\t      1048 ns/op\t      64 B/op\t       2 allocs/op\n```\n\n\n## References \n\n- [Gennry]\n\n\n[Gennry]: https://github.com/cheekybits/genny\n","funding_links":["https://github.com/sponsors/kazu"],"categories":["Utilities","公用事业公司"],"sub_categories":["Utility/Miscellaneous","实用程序/Miscellaneous","Fail injection"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkazu%2Floncha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkazu%2Floncha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkazu%2Floncha/lists"}