func SliceUint32Diff(a, b []uint32, cb func(uint32)) {
	for i := 0; i < len(a); i++ {
		found := false
		for j := 0; j < len(b); j++ {
			if a[i] == b[j] {
				found = true
				break
			}
		}
		if !found && cb != nil {
			cb(a[i])
		}
	}
}
SliceUint32Diff returns a - b and cb will be called on each found difference.
package tools
import (
	"bytes"
	"reflect"
)
func DeleteItemFromSlice(slice interface{}, index int) {
	v := reflect.ValueOf(slice)
	if v.Kind() == reflect.Ptr {
		v = reflect.Indirect(v)
	}
	vLength := v.Len()
	if v.Kind() != reflect.Slice {
		panic("slice is not valid")
	}
	if index >= vLength || index < 0 {
		panic("invalid index")
	}
	switch vLength {
	case 1:
		v.SetLen(0)
	default:
		v.Index(index).Set(v.Index(v.Len() - 1))
		v.SetLen(vLength - 1)
	}
}
func SliceInt64Diff(a, b []int64, cb func(int64)) {
	for i := 0; i < len(a); i++ {
		found := false
		for j := 0; j < len(b); j++ {
			if a[i] == b[j] {
				found = true
				break
			}
		}
		if !found && cb != nil {
			cb(a[i])
		}
	}
}
func SliceUint64Diff(a, b []uint64, cb func(uint64)) {
	for i := 0; i < len(a); i++ {
		found := false
		for j := 0; j < len(b); j++ {
			if a[i] == b[j] {
				found = true
				break
			}
		}
		if !found && cb != nil {
			cb(a[i])
		}
	}
}
func SliceInt32Diff(a, b []int32, cb func(int32)) {
	for i := 0; i < len(a); i++ {
		found := false
		for j := 0; j < len(b); j++ {
			if a[i] == b[j] {
				found = true
				break
			}
		}
		if !found && cb != nil {
			cb(a[i])
		}
	}
}