100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
// 辅助工具层
|
|
package util
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
"unsafe"
|
|
)
|
|
|
|
func InArr(array []int, column int) bool {
|
|
i := 0
|
|
for i < len(array) {
|
|
if array[i] == column {
|
|
return true
|
|
}
|
|
i++
|
|
}
|
|
return false
|
|
}
|
|
|
|
func InstrArr(array []string, column string) bool {
|
|
i := 0
|
|
l := len(array)
|
|
for i < l {
|
|
if array[i] == column {
|
|
return true
|
|
}
|
|
i++
|
|
}
|
|
return false
|
|
}
|
|
|
|
func InMap(maps map[string]int, column string) (ok bool) {
|
|
_, ok = maps[column]
|
|
return
|
|
}
|
|
|
|
func RemoveRepeatedElement(arr []string) (newArr []interface{}) {
|
|
newArr = make([]interface{}, 0)
|
|
for i := 0; i < len(arr); i++ {
|
|
repeat := false
|
|
for j := i + 1; j < len(arr); j++ {
|
|
if arr[i] == arr[j] {
|
|
repeat = true
|
|
break
|
|
}
|
|
}
|
|
if !repeat {
|
|
newArr = append(newArr, arr[i])
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// b2s converts byte slice to a string without memory allocation.
|
|
// See https://groups.google.com/forum/#!msg/Golang-Nuts/ENgbUzYvCuU/90yGx7GUAgAJ .
|
|
//
|
|
// Note it may break if string and/or slice header will change
|
|
// in the future go versions.
|
|
func Bytes2str(b []byte) string {
|
|
/* #nosec G103 */
|
|
return *(*string)(unsafe.Pointer(&b))
|
|
}
|
|
|
|
// s2b converts string to a byte slice without memory allocation.
|
|
//
|
|
// Note it may break if string and/or slice header will change
|
|
// in the future go versions.
|
|
func Str2bytes(s string) (b []byte) {
|
|
/* #nosec G103 */
|
|
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
|
|
/* #nosec G103 */
|
|
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
|
|
bh.Data = sh.Data
|
|
bh.Cap = sh.Len
|
|
bh.Len = sh.Len
|
|
return b
|
|
}
|
|
|
|
// SplitInt 分割字符串并转为INT
|
|
func SplitInt(s, sep string) ([]int, error) {
|
|
var tmpStr = strings.Split(s, sep)
|
|
if len(tmpStr) == 0 {
|
|
return nil, errors.New("no split int")
|
|
}
|
|
var err error
|
|
var tmp int
|
|
var rlt []int
|
|
for i := range tmpStr {
|
|
tmp, err = strconv.Atoi(tmpStr[i])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rlt = append(rlt, tmp)
|
|
}
|
|
return rlt, nil
|
|
}
|