|
|
package CommonUtil
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
uuid "github.com/satori/go.uuid"
|
|
|
"net"
|
|
|
"net/http"
|
|
|
"os"
|
|
|
"regexp"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
"unsafe"
|
|
|
)
|
|
|
|
|
|
/**
|
|
|
功能:删除多余的空格
|
|
|
作者:黄海
|
|
|
时间:2020-04-03
|
|
|
*/
|
|
|
func DeleteExtraSpace(s string) string {
|
|
|
//删除字符串中的多余空格,有多个空格时,仅保留一个空格
|
|
|
s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格
|
|
|
regstr := "\\s{2,}" //两个及两个以上空格的正则表达式
|
|
|
reg, _ := regexp.Compile(regstr) //编译正则表达式
|
|
|
s2 := make([]byte, len(s1)) //定义字符数组切片
|
|
|
copy(s2, s1) //将字符串复制到切片
|
|
|
spc_index := reg.FindStringIndex(string(s2)) //在字符串中搜索
|
|
|
for len(spc_index) > 0 { //找到适配项
|
|
|
s2 = append(s2[:spc_index[0]+1], s2[spc_index[1]:]...) //删除多余空格
|
|
|
spc_index = reg.FindStringIndex(string(s2)) //继续在字符串中搜索
|
|
|
}
|
|
|
return string(s2)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取UUID
|
|
|
作者:黄海
|
|
|
时间:2020-02-03
|
|
|
*/
|
|
|
func GetUUID() string {
|
|
|
u2 := strings.ToUpper(uuid.NewV4().String())
|
|
|
return u2
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:从一个数据库的查询返回结果中获取指定字段的IDS
|
|
|
作者:黄海
|
|
|
时间:2020-02-14
|
|
|
*/
|
|
|
func Ids(list []map[string]interface{}, key string) []string {
|
|
|
var ids []string
|
|
|
for i := 0; i < len(list); i++ {
|
|
|
switch list[i][key].(type) {
|
|
|
case string:
|
|
|
ids = append(ids, list[i][key].(string))
|
|
|
break
|
|
|
case int64:
|
|
|
ids = append(ids, strconv.FormatInt(list[i][key].(int64), 10))
|
|
|
}
|
|
|
}
|
|
|
return ids
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断是不是合法的日期格式
|
|
|
作者:黄海
|
|
|
时间:2020-03-23
|
|
|
*/
|
|
|
func IsDate(date string) bool {
|
|
|
_, err := time.Parse("2006-01-02 15:04:05", date)
|
|
|
if err != nil {
|
|
|
return false
|
|
|
} else {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取蛇形命名的字符串
|
|
|
作者:黄海
|
|
|
时间:2020-01-22
|
|
|
*/
|
|
|
func GetSnakeCaseStr(str string) string {
|
|
|
array := strings.Split(str, "_")
|
|
|
var result string
|
|
|
for i := 0; i < len(array); i++ {
|
|
|
result = result + strings.ToUpper(array[i][0:1]) + array[i][1:]
|
|
|
}
|
|
|
return result
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将int数据类型转为int64
|
|
|
作者:黄海
|
|
|
时间:2020-02-18
|
|
|
*/
|
|
|
func ConvertIntToInt64(i int) int64 {
|
|
|
s := strconv.Itoa(i)
|
|
|
s64, _ := strconv.ParseInt(s, 10, 64)
|
|
|
return s64
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取当前的时间戳,精确度纳秒
|
|
|
作者:黄海
|
|
|
时间:2020-02-18
|
|
|
*/
|
|
|
func GetCurrentTimestamp() int64 {
|
|
|
return time.Now().UnixNano()
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取当前的时间字符串
|
|
|
作者:黄海
|
|
|
时间:2020-02-21
|
|
|
*/
|
|
|
func GetCurrentTime() string {
|
|
|
timeStr := time.Now().Format("2006-01-02 15:04:05")
|
|
|
//当前时间的字符串,2006-01-02 15:04:05据说是golang的诞生时间,固定写法
|
|
|
return timeStr
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断所给路径文件/文件夹是否存在
|
|
|
作者: 黄海
|
|
|
时间:2020-03-26
|
|
|
*/
|
|
|
func Exists(path string) bool {
|
|
|
_, err := os.Stat(path) //os.Stat获取文件信息
|
|
|
if err != nil {
|
|
|
if os.IsExist(err) {
|
|
|
return true
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取访问的客户机IP
|
|
|
作者:黄海
|
|
|
时间:2020-03-26
|
|
|
*/
|
|
|
func RemoteIp(req *http.Request) string {
|
|
|
remoteAddr := req.RemoteAddr
|
|
|
if ip := req.Header.Get("Remote_addr"); ip != "" {
|
|
|
remoteAddr = ip
|
|
|
} else {
|
|
|
remoteAddr, _, _ = net.SplitHostPort(remoteAddr)
|
|
|
}
|
|
|
|
|
|
if remoteAddr == "::1" {
|
|
|
remoteAddr = "127.0.0.1"
|
|
|
}
|
|
|
return remoteAddr
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断某一个值是否含在切片之中
|
|
|
作者:黄海
|
|
|
时间:2020-03-26
|
|
|
*/
|
|
|
func InArray(need interface{}, haystack interface{}) bool {
|
|
|
switch key := need.(type) {
|
|
|
case int:
|
|
|
for _, item := range haystack.([]int) {
|
|
|
if item == key {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
case string:
|
|
|
for _, item := range haystack.([]string) {
|
|
|
if item == key {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
case int64:
|
|
|
for _, item := range haystack.([]int64) {
|
|
|
if item == key {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
case float64:
|
|
|
for _, item := range haystack.([]float64) {
|
|
|
if item == key {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
default:
|
|
|
return false
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:转换MapString 到MapInterface
|
|
|
万恶的map[string]string-->map[string]interface{}
|
|
|
作者:黄海
|
|
|
时间:2020-03-27
|
|
|
*/
|
|
|
func ConvertMapStringToMapInterface(_bean map[string]string) map[string]interface{} {
|
|
|
n := make(map[string]interface{})
|
|
|
for k, v := range _bean {
|
|
|
n[k] = v
|
|
|
}
|
|
|
return n
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将整型数组转为字符串型数组
|
|
|
作者:黄海
|
|
|
时间:2020-04-12
|
|
|
*/
|
|
|
func ConvertIntegerArrayToStringArray(nums []int) []string {
|
|
|
return strings.Split(strings.Replace(fmt.Sprint(nums)[1:], "]", "", -1), " ")
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将int64转化为string
|
|
|
作者:黄海
|
|
|
时间:2020-04-20
|
|
|
*/
|
|
|
func ConvertInt64ToString(int64 int64) string {
|
|
|
return strconv.FormatInt(int64, 10)
|
|
|
}
|
|
|
/**
|
|
|
功能:将一个查询结果转化为字符串,方便返回
|
|
|
作者:黄海
|
|
|
时间:2020-04-22
|
|
|
*/
|
|
|
func SerializeToString(list interface{} )string{
|
|
|
if len(list.([]map[string]interface{}))==0{
|
|
|
return "[]"
|
|
|
}else{
|
|
|
data, _ := json.Marshal(list)
|
|
|
return string(data)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将JSON字符串转化为map数组
|
|
|
作者: 黄海
|
|
|
时间:2020-04-17
|
|
|
*/
|
|
|
func ConvertJsonStringToMapArray(data string) []map[string]interface{} {
|
|
|
var m = make([]map[string]interface{}, 0)
|
|
|
str := []byte(data)
|
|
|
json.Unmarshal(str, &m)
|
|
|
return m
|
|
|
}
|
|
|
/**
|
|
|
功能:将JSON字符串转化为map数组
|
|
|
作者: 黄海
|
|
|
时间:2020-04-17
|
|
|
*/
|
|
|
func ConvertJsonStringToMap(data string) map[string]interface{} {
|
|
|
var m = make(map[string]interface{}, 0)
|
|
|
str := []byte(data)
|
|
|
json.Unmarshal(str, &m)
|
|
|
return m
|
|
|
}
|
|
|
|
|
|
func ConvertJsonStringToBytes(s string) []byte {
|
|
|
x := (*[2]uintptr)(unsafe.Pointer(&s))
|
|
|
h := [3]uintptr{x[0], x[1], x[1]}
|
|
|
|
|
|
return *(*[]byte)(unsafe.Pointer(&h))
|
|
|
}
|
|
|
|
|
|
func ConvertBytesToString(b []byte) string {
|
|
|
return *(*string)(unsafe.Pointer(&b))
|
|
|
}
|
|
|
|
|
|
func StringArrayContain(items []string, item string) bool {
|
|
|
for _, eachItem := range items {
|
|
|
if eachItem == item {
|
|
|
return true
|
|
|
}
|
|
|
}
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
func ConvertInterfaceArrayToStringArray(params []interface{}) []string {
|
|
|
var paramStringArray []string
|
|
|
for _, param := range params {
|
|
|
switch v := param.(type) {
|
|
|
case string:
|
|
|
paramStringArray = append(paramStringArray, v)
|
|
|
case int:
|
|
|
strV := strconv.FormatInt(int64(v), 10)
|
|
|
paramStringArray = append(paramStringArray, strV)
|
|
|
case float64:
|
|
|
strV := strconv.FormatFloat(v, 'f', -1, 64)
|
|
|
paramStringArray = append(paramStringArray, strV)
|
|
|
default:
|
|
|
panic("params type not supported")
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return paramStringArray
|
|
|
} |