/*
* @Description:常用工具
* @Author: Casso-Wong
*/
package tool
import (
"fmt"
"os"
"time"
)
// ParseSlicess 字符串切片去重
func ParseSlicess(slc []string) []string {
var res []string
temMap := make(map[string]bool, len(slc))
for _, v := range slc {
if temMap[v] == false {
temMap[v] = true
res = append(res, v)
}
}
return res
}
// DeledeSlice 根据传入string删除相同的切片元素: 我的应用场景是知道切片中必然有且仅有一个相同的元素,想删掉
func DeledeSlice(slc []string, target string) []string {
var index = 0
for i, v := range slc {
if v == target {
index = i
break
}
}
// ["aa","bb","cc"] 例: index = 2 则: 会超出下标界限
if index == len(slc)-1 && len(slc) != 0 { // 删除最后一项
slc = slc[:index] // 左包含,右不包含
} else {
slc = append(slc[:index], slc[index+1:]...) // 左包含,右不包含
}
return slc
}
// StartToday 返回当天零点
func StartToday() time.Time {
t := time.Now()
tm1 := time.Date(t.Year(), t.Month(), t.Day()-1, 0, 0, 0, 0, t.Location())
tm2 := tm1.AddDate(0, 0, 1)
return tm2
}
//PathExists 判断文件夹是否存在 不存在则创建
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
// 创建文件夹
err := os.MkdirAll(path, os.ModePerm)
if err != nil {
fmt.Printf("mkdir failed![%v]\n", err)
} else {
return true, nil
}
}
return false, err
}
// TurnToSlice 将切片转为特定字符串隔开的字符串(为了存入数据库..我也是福了)
func TurnToSlice(s []string, slc string) (res string) { // 效果类似 : 1,2,3,4 || 1:2:3:4
for i, v := range s {
if i != len(s)-1 {
res += v + slc
} else {
res += v
}
}
return
}