Files
go-pkg/utils/utils.go
2021-07-13 17:44:54 +08:00

111 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package utils
import (
"bytes"
"compress/gzip"
"encoding/binary"
"io/ioutil"
"os"
"os/signal"
"reflect"
"regexp"
"strconv"
"syscall"
)
var (
mailChecker = regexp.MustCompile(`^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$`)
phoneChecker = regexp.MustCompile(`^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$`)
)
//校验邮箱格式
func CheckMailFormat(mail string) bool {
return mailChecker.MatchString(mail)
}
//校验电话号码格式
func CheckPhoneFormat(phone string) bool {
return phoneChecker.MatchString(phone)
}
//如果监听到系统中断信号则执行onNotify()
func Notify(onNotify func()) {
//SIGHUP 终端控制进程结束(终端连接断开)
//SIGQUIT 用户发送QUIT字符(Ctrl+/)触发
//SIGTERM 结束程序(可以被捕获、阻塞或忽略)
//SIGINT 用户发送INTR字符(Ctrl+C)触发
//SIGSTOP 停止进程(不能被捕获、阻塞或忽略)
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGINT)
for {
s := <-ch
switch s {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGINT, syscall.SIGHUP:
if onNotify == nil {
return
}
onNotify()
default:
return
}
}
}
// Contain 判断src中是否有元素ele
func Contain(src interface{}, ele interface{}) bool {
switch reflect.TypeOf(src).Kind() {
case reflect.Slice, reflect.Array:
s := reflect.ValueOf(src)
for i := 0; i < s.Len(); i++ {
if reflect.DeepEqual(ele, s.Index(i).Interface()) {
return true
}
}
}
return false
}
// Interface2Map 将嵌套的map[string]interface全部转换成一层
func Interface2Map(data map[string]interface{}) map[string]interface{} {
result := make(map[string]interface{})
for k, iface := range data {
switch v := iface.(type) {
case map[string]interface{}:
for i, u := range v {
result[i] = u
}
default:
result[k] = v
}
}
return result
}
// UnGZIP gzip解压
func UnGZIP(content []byte) ([]byte, error) {
buffer := new(bytes.Buffer)
err := binary.Write(buffer, binary.BigEndian, content)
if err != nil {
return nil, err
}
zipReader, err := gzip.NewReader(buffer)
if err != nil {
return nil, err
}
defer zipReader.Close()
result, err := ioutil.ReadAll(zipReader)
if err != nil {
return nil, err
}
return result, nil
}
// DecimalToBinary 十进制转换为二进制字符串
func DecimalToBinary(data int) (decimal string) {
for ; data > 0; data = data / 2 {
n := data % 2
decimal = strconv.Itoa(n) + decimal
}
return
}