|
|
- package utils
-
- import (
- "fmt"
- "io"
- "log"
- "mime/multipart"
- "os"
- "reflect"
- "strconv"
- "strings"
- "time"
- )
-
- const (
- rolePrefix string = "role_"
- )
-
- // 将结构体内所有string类型字段去除首位空格
- // sp为结构体指针, s为结构体值
- func TrimStruct(sp interface{}, s interface{}) {
- // 判断类型是否为struct
- av := reflect.ValueOf(sp)
- avv := reflect.ValueOf(s)
- at := reflect.TypeOf(s)
- // 简单判断下
- if at.Kind() != reflect.Struct {
- log.Printf("s must be a struct")
- return
- }
- av = reflect.ValueOf(av.Interface())
- for i := 0; i < avv.NumField(); i++ {
- if at.Field(i).Type.Name() == "string" {
- f := av.Elem().Field(i)
- val := strings.TrimSpace(avv.Field(i).String())
- f.Set(reflect.ValueOf(val))
- }
-
- }
-
- return
- }
-
- //
- func FmtRolePrefix(sub interface{}) string {
- var s string
- switch sub.(type) {
- case int64:
- uid := sub.(int64)
- s = strconv.FormatInt(uid, 10)
- case string:
- s = sub.(string)
- }
- return fmt.Sprintf("%s%s", rolePrefix, s)
- }
-
- // timestamp to time
- func StampToTime(st int64) time.Time {
- return time.Unix(st / 1000, 0)
- }
-
- func IdsStrToIdsIntGroup(keys string) []int {
- IDS := make([]int, 0)
- ids := strings.Split(keys, ",")
- for i := 0; i < len(ids); i++ {
- ID:= ValueToInt(ids[i],0)
- IDS = append(IDS, ID)
- }
- return IDS
- }
-
- func IDsToStringIn(ids []int) string {
- ll := len(ids)
- var str string
- for i := 0; i < ll; i++ {
- if i > 0 {
- str = str + "," + ValueToString(ids[i], "")
- } else {
- str = ValueToString(ids[i], "")
- }
- }
- return str
- }
-
- func IDsToStrings(ids []string) string {
- ll := len(ids)
- var str string
- for i := 0; i < ll; i++ {
- if i > 0 {
- str = str + "','" + ValueToString(ids[i], "")
- } else {
- str = "'" + ValueToString(ids[i], "")
- }
- }
- if len(str) > 0 {
- str = str + "'"
- }
- return str
- }
-
- // SaveUploadedFile uploads the form file to specific dst.
- func SaveUploadedFile(file *multipart.FileHeader, dst string) error {
- src, err := file.Open()
- if err != nil {
- return err
- }
- defer src.Close()
-
- out, err := os.Create(dst)
- if err != nil {
- return err
- }
- defer out.Close()
-
- _, err = io.Copy(out, src)
- return err
- }
-
- func MakeOrderSn(key string) string {
- // 转大写
- key = strings.ToUpper(key)
-
- // 获取时间戳
- ts := time.Now().Format("20060102150405.000")
- tss := fmt.Sprint(time.Now().UnixNano())
- ts = string([]byte(ts)[0:14]) + string([]byte(tss)[13:16])
-
- return key + ts
- }
- //判断字符串是否在一个数组里
- func IsContain(items []string, item string) bool {
- for _, eachItem := range items {
- if eachItem == item {
- return true
- }
- }
- return false
- }
- // 是否是文件 不是文件也不一定是目录
- func IsFile(path string) bool {
- s, err := os.Stat(path)
- if err != nil {
- return false
- }
- return !s.IsDir()
- }
-
- //求并集
- func Union(slice1, slice2 []string) []string {
- m := make(map[string]int)
- for _, v := range slice1 {
- m[v]++
- }
-
- for _, v := range slice2 {
- times, _ := m[v]
- if times == 0 {
- slice1 = append(slice1, v)
- }
- }
- return slice1
- }
-
- //求交集
- func Intersect(slice1, slice2 []string) []string {
- m := make(map[string]int)
- nn := make([]string, 0)
- for _, v := range slice1 {
- m[v]++
- }
-
- for _, v := range slice2 {
- times, _ := m[v]
- if times == 1 {
- nn = append(nn, v)
- }
- }
- return nn
- }
-
- //求差集 slice1-并集
- func Difference(slice1, slice2 []string) []string {
- m := make(map[string]int)
- nn := make([]string, 0)
- inter := Intersect(slice1, slice2)
- for _, v := range inter {
- m[v]++
- }
-
- for _, value := range slice1 {
- times, _ := m[value]
- if times == 0 {
- nn = append(nn, value)
- }
- }
- return nn
- }
-
- // 将给定的整数值转换成给定长度的字符串,不足长度的在前面补足0
- func ConvInt2FormatString(input, ilen int)(retstring string){
- var igap int
-
- if len(string(input)) >= ilen {
- retstring = string(input)
- }else{
- igap = ilen - len(strconv.Itoa(input))
- retstring = strings.Repeat("0", igap) + strconv.Itoa(input)
- }
- return
- }
|