A high-performance slice Utilities for Go.
- high-performance slice filter/finder.
- linked-list generics template using Gennry
go get github.com/kazu/loncha
slice utility dosent use reflect/interface operation.
    import "github.com/kazu/loncha"
    type GameObject struct {
        ID int
        Name string
        Pos []float
    }
    ...
    var objs []GameObjectfind object from slice
    loncha.Find(&objs, func(i int) bool {
        return objs[i].ID == 6
    } filter/delete object via condition function
    loncha.Filter(&objs, func(obj *GameObject) bool {
        return obj.ID == 12
    } 
	loncha.Delete(&objs, func(i int) bool {
		return objs[i].ID == 555
	})select object with condition function
    // find one object with conditions.
    obj, err := Select(&objs, func(i int) bool {
		return slice[i].ID < 50
	})shuffle slice
    err = loncha.Shuffle(objs, 2)
    loncha.Reverse(objs)got intersection from two slices
    var obj2 []GameObject
    intersectedObj := InsertSect(obj, obj2)
    sort.Slice(objs, func(i int) bool {
        return objs[i].ID >=  objs[j].ID 
    })
    sort.Slice(objs2, func(i int) bool {
        return objs[i].ID >=  objs[j].ID 
    })
    intersect2 := IntersectSorted(obj, obj2, func(s []GameObject, i int) int {
        return s[i].ID
    })subtraction from two slices
    subtractObj := Sub(obj, obj2)
    subtract2 := SubSorted(obj, obj2, func(s []GameObject, i int) int {
        return s[i].ID
    })Returns an object formed from operands via function
	slice1 := []int{10, 6, 4, 2}
	sum := Inject(slice1, func(sum *int, t int) int {
		return *sum + t
	})define base struct
package game_object
import (
    "github.com/kazu/loncha/list_head"
type Player struct {
    ID int
    Name string
    Hp int
    list_head.ListHead
}
generate linked-list
    $ go get go get github.com/cheekybits/genny
    $ wget -q -O - "https://github.com/kazu/loncha/master/container_list/list.go" | genny  gen "ListEntry=Player" > player_list.go
    $ wget -q -O - "https://github.com/kazu/loncha/master/container_list/list_test.go" | genny  gen "ListEntry=Player" > player_list_test.goloncha.Uniq-16         	    			1000	    997543 ns/op	  548480 B/op	   16324 allocs/op
loncha.UniqWithSort-16 	    			1000	   2237924 ns/op	     256 B/op	       7 allocs/op
loncha.UniqWithSort(sort)-16         	1000	    260283 ns/op	     144 B/op	       4 allocs/op
hand_Uniq-16                          	1000	    427765 ns/op	  442642 B/op	       8 allocs/op
hand_Uniq_iface-16                    	1000	    808895 ns/op	  632225 B/op	    6322 allocs/op
go-funk.Uniq-16                       	1000	   1708396 ns/op	  655968 B/op	   10004 allocs/op
loncha.Filter-16         	     100	     89142 ns/op	   82119 B/op	       4 allocs/op
loncha.Filter_pointer-16 	     100	       201 ns/op	       0 B/op	       0 allocs/op
hand_Filter_pointer-16   	     100	     24432 ns/op	   81921 B/op	       1 allocs/op
go-funk.Filter-16        	     100	   2370492 ns/op	  640135 B/op	   20004 allocs/op
go-funk.Filter_pointer-16        100	      1048 ns/op	      64 B/op	       2 allocs/op