搬迁代码
This commit is contained in:
commit
0d6f8a8cec
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Created by .ignore support plugin (hsz.mobi)
|
||||||
|
### Go template
|
||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.xlsx
|
||||||
|
|
||||||
|
# Test binary, built with `go test -c`
|
||||||
|
*.test
|
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Dependency directories (remove the comment below to include it)
|
||||||
|
# vendor/
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
mail_test.go
|
||||||
|
|
46
cli.go
Normal file
46
cli.go
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// Package util ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 1:53 下午 2021/8/14
|
||||||
|
package util
|
||||||
|
|
||||||
|
import "flag"
|
||||||
|
|
||||||
|
// ParseCLIParameter 解析命令含参数
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 1:54 下午 2021/8/14
|
||||||
|
func ParseCLIParameter(parameterNameList []string) map[string]string {
|
||||||
|
cliParameterTable := make(map[string]*string)
|
||||||
|
for _, parameterName := range parameterNameList {
|
||||||
|
cliParameterTable[parameterName] = flag.String(parameterName, "", parameterName)
|
||||||
|
}
|
||||||
|
// 这里有一个非常中的操作,转换,必须调用该方法
|
||||||
|
flag.Parse()
|
||||||
|
formatTable := make(map[string]string)
|
||||||
|
for k, v := range cliParameterTable {
|
||||||
|
formatTable[k] = *v
|
||||||
|
}
|
||||||
|
return formatTable
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseCLIParameterWithDefaultValue 解析命令行参数,并提供可选的默认值
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 1:55 下午 2021/8/14
|
||||||
|
func ParseCLIParameterWithDefaultValue(parameterParseTable map[string]string) map[string]string {
|
||||||
|
cliParameterTable := make(map[string]*string)
|
||||||
|
for parameterName, defaultValue := range parameterParseTable {
|
||||||
|
cliParameterTable[parameterName] = flag.String(parameterName, defaultValue, parameterName)
|
||||||
|
}
|
||||||
|
// 这里有一个非常中的操作,转换,必须调用该方法
|
||||||
|
flag.Parse()
|
||||||
|
formatTable := make(map[string]string)
|
||||||
|
for k, v := range cliParameterTable {
|
||||||
|
formatTable[k] = *v
|
||||||
|
}
|
||||||
|
return formatTable
|
||||||
|
}
|
87
file.go
Normal file
87
file.go
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : 文件相关工具
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-04-26 6:00 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
yml "gopkg.in/yaml.v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetProjectPath 获取项目路径(可执行文件所在目录)
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 10:32 下午 2021/4/26
|
||||||
|
func GetProjectPath() (string, error) {
|
||||||
|
rootPath, err := os.Getwd()
|
||||||
|
if nil != err {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
pathArr := strings.Split(rootPath, "/")
|
||||||
|
if len(pathArr) > 0 {
|
||||||
|
if pathArr[len(pathArr)-1] == "test" {
|
||||||
|
rootPath = strings.Join(pathArr[0:len(pathArr)-1], "/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rootPath, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadYmlConfig 读取yml配置问价,并解析到指定的结构体中
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 10:35 下午 2021/4/26
|
||||||
|
func ReadYmlConfig(filePath string, result interface{}) error {
|
||||||
|
if nil == result {
|
||||||
|
return errors.New("接收读取结果的数据指针为NIL")
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
fileContent []byte
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if fileContent, err = ReadFileContent(filePath); nil != err {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return yml.Unmarshal(fileContent, result)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadFileContent 读取文件内容
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 10:37 下午 2021/4/26
|
||||||
|
func ReadFileContent(filePath string) ([]byte, error) {
|
||||||
|
if exist, isFile := IsFileExist(filePath); !exist || !isFile {
|
||||||
|
//文件不存在或者是一个目录
|
||||||
|
return nil, errors.New(filePath + " 文件不存在或者是一个目录!")
|
||||||
|
}
|
||||||
|
//打开文件
|
||||||
|
var (
|
||||||
|
f *os.File
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if f, err = os.Open(filePath); nil != err {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ioutil.ReadAll(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsFileExist 判断文件是否存在
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 10:37 下午 2021/4/26
|
||||||
|
func IsFileExist(filePath string) (bool, bool) {
|
||||||
|
f, err := os.Stat(filePath)
|
||||||
|
return nil == err || os.IsExist(err), (nil == err || os.IsExist(err)) && !f.IsDir()
|
||||||
|
}
|
32
hash.go
Normal file
32
hash.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : util...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-02-24 11:04 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/spaolacci/murmur3"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetHashID ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 11:04 下午 2021/2/24
|
||||||
|
func GetHashID(key interface{}) uint64 {
|
||||||
|
return murmur3.Sum64([]byte(fmt.Sprintf("%v", key)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetHashIDMod 获取hashID并取模
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 11:07 下午 2021/2/24
|
||||||
|
func GetHashIDMod(key interface{}, shard int) int {
|
||||||
|
return int(GetHashID(key) % uint64(shard))
|
||||||
|
}
|
53
ip.go
Normal file
53
ip.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : util...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-03-09 5:56 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetHostIP 获取本机IP地址
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:58 下午 2021/3/9
|
||||||
|
func GetHostIP() string {
|
||||||
|
hostIP := "127.0.0.1"
|
||||||
|
addrs, _ := net.InterfaceAddrs()
|
||||||
|
for _, address := range addrs {
|
||||||
|
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||||
|
if ipnet.IP.To4() != nil {
|
||||||
|
hostIP = ipnet.IP.String()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hostIP
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRemoteIp 获取远端IP
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:35 下午 2021/11/22
|
||||||
|
func GetRemoteIp(req *http.Request) string {
|
||||||
|
|
||||||
|
// Try via request
|
||||||
|
|
||||||
|
ip, _, err := net.SplitHostPort(req.RemoteAddr)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return "::1"
|
||||||
|
}
|
||||||
|
userIP := net.ParseIP(ip)
|
||||||
|
if userIP == nil {
|
||||||
|
return "::1"
|
||||||
|
}
|
||||||
|
return userIP.String()
|
||||||
|
}
|
91
json.go
Normal file
91
json.go
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : json 工具函数
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-09-14 8:38 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
// JSONUnmarshalWithNumber 解析json
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 8:39 下午 2021/9/14
|
||||||
|
func JSONUnmarshalWithNumber(byteData []byte, receiver interface{}) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(byteData))
|
||||||
|
decoder.UseNumber()
|
||||||
|
return decoder.Decode(receiver)
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONUnmarshalWithNumberForIOReader ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 8:43 下午 2021/9/14
|
||||||
|
func JSONUnmarshalWithNumberForIOReader(ioReader io.ReadCloser, receiver interface{}) error {
|
||||||
|
decoder := json.NewDecoder(ioReader)
|
||||||
|
decoder.UseNumber()
|
||||||
|
return decoder.Decode(receiver)
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONConsoleOutput ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:45 下午 2021/11/5
|
||||||
|
func JSONConsoleOutput(data interface{}) {
|
||||||
|
var out bytes.Buffer
|
||||||
|
switch reflect.TypeOf(data).Kind() {
|
||||||
|
case reflect.Slice:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Array:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Map:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Ptr:
|
||||||
|
byteData, _ := json.Marshal(data)
|
||||||
|
_ = json.Indent(&out, []byte(string(byteData)+"\n"), "", "\t")
|
||||||
|
_, _ = out.WriteTo(os.Stdout)
|
||||||
|
return
|
||||||
|
case reflect.Int:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Int8:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Int16:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Int32:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Int64:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Uint:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Uint8:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Uint16:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Uint32:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Uint64:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Float32:
|
||||||
|
fallthrough
|
||||||
|
case reflect.Float64:
|
||||||
|
fallthrough
|
||||||
|
case reflect.String:
|
||||||
|
_ = json.Indent(&out, []byte(fmt.Sprintf("%v\n", data)), "", "\t")
|
||||||
|
_, _ = out.WriteTo(os.Stdout)
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
fmt.Println("")
|
||||||
|
}
|
||||||
|
}
|
209
map.go
Normal file
209
map.go
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
// Package util ...
|
||||||
|
//
|
||||||
|
// Description : 从map中读取数据
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-11-16 4:28 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.zhangdeman.cn/zhangdeman/gopkg/convert"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Exist 检测一个key在map中是否存在
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 4:52 下午 2021/11/16
|
||||||
|
func Exist(source map[interface{}]interface{}, key interface{}) bool {
|
||||||
|
if nil == source {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if _, exist := source[key]; !exist {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt 获取int值
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 4:30 下午 2021/11/16
|
||||||
|
func GetInt(source map[interface{}]interface{}, key interface{}, defaultVal int) int {
|
||||||
|
var result int
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt8 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 4:59 下午 2021/11/16
|
||||||
|
func GetInt8(source map[interface{}]interface{}, key interface{}, defaultVal int8) int8 {
|
||||||
|
var result int8
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt16 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 4:59 下午 2021/11/16
|
||||||
|
func GetInt16(source map[interface{}]interface{}, key interface{}, defaultVal int16) int16 {
|
||||||
|
var result int16
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt32 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:00 下午 2021/11/16
|
||||||
|
func GetInt32(source map[interface{}]interface{}, key interface{}, defaultVal int32) int32 {
|
||||||
|
var result int32
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetInt64 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:00 下午 2021/11/16
|
||||||
|
func GetInt64(source map[interface{}]interface{}, key interface{}, defaultVal int64) int64 {
|
||||||
|
var result int64
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:01 下午 2021/11/16
|
||||||
|
func GetUint(source map[interface{}]interface{}, key interface{}, defaultVal uint) uint {
|
||||||
|
var result uint
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint8 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:01 下午 2021/11/16
|
||||||
|
func GetUint8(source map[interface{}]interface{}, key interface{}, defaultVal uint8) uint8 {
|
||||||
|
var result uint8
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint16 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:02 下午 2021/11/16
|
||||||
|
func GetUint16(source map[interface{}]interface{}, key interface{}, defaultVal uint16) uint16 {
|
||||||
|
var result uint16
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint32 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:02 下午 2021/11/16
|
||||||
|
func GetUint32(source map[interface{}]interface{}, key interface{}, defaultVal uint32) uint32 {
|
||||||
|
var result uint32
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUint64 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:03 下午 2021/11/16
|
||||||
|
func GetUint64(source map[interface{}]interface{}, key interface{}, defaultVal uint64) uint64 {
|
||||||
|
var result uint64
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFloat32 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:03 下午 2021/11/16
|
||||||
|
func GetFloat32(source map[interface{}]interface{}, key interface{}, defaultVal float32) float32 {
|
||||||
|
var result float32
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFloat64 ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:04 下午 2021/11/16
|
||||||
|
func GetFloat64(source map[interface{}]interface{}, key interface{}, defaultVal float64) float64 {
|
||||||
|
var result float64
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetString ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 5:07 下午 2021/11/16
|
||||||
|
func GetString(source map[interface{}]interface{}, key interface{}, defaultVal string) string {
|
||||||
|
var result string
|
||||||
|
if err := GetDataWithReceiver(source, key, &result); nil != err {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDataWithReceiver 使用制定的数据指针接受结果
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 4:54 下午 2021/11/16
|
||||||
|
func GetDataWithReceiver(source map[interface{}]interface{}, key interface{}, receiver interface{}) error {
|
||||||
|
if !Exist(source, key) {
|
||||||
|
return errors.New("key is not found")
|
||||||
|
}
|
||||||
|
return convert.ConvertAssign(receiver, source[key])
|
||||||
|
}
|
82
string.go
Normal file
82
string.go
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : 字符串相关的工具
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-03-09 6:00 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"math/rand"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenRandomString 获取随机长度的字符串
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 6:01 下午 2021/3/9
|
||||||
|
func GenRandomString(source string, length uint) string {
|
||||||
|
if length == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if len(source) == 0 {
|
||||||
|
//字符串为空,默认字符源为如下(去除易混淆的i/l):
|
||||||
|
source = "0123456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ"
|
||||||
|
}
|
||||||
|
strByte := []byte(source)
|
||||||
|
var genStrByte = make([]byte, 0)
|
||||||
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
for i := 0; i < int(length); i++ {
|
||||||
|
genStrByte = append(genStrByte, strByte[r.Intn(len(strByte))])
|
||||||
|
}
|
||||||
|
return string(genStrByte)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Md5 对字符串进行md5加密
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 6:01 下午 2021/3/9
|
||||||
|
func Md5(str string) string {
|
||||||
|
h := md5.New()
|
||||||
|
_, _ = h.Write([]byte(str))
|
||||||
|
return hex.EncodeToString(h.Sum(nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SnakeCaseToCamel 蛇形字符串转换为驼峰
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 4:58 下午 2021/10/25
|
||||||
|
func SnakeCaseToCamel(str string) string {
|
||||||
|
if len(str) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
builder := strings.Builder{}
|
||||||
|
index := 0
|
||||||
|
if str[0] >= 'a' && str[0] <= 'z' {
|
||||||
|
builder.WriteByte(str[0] - ('a' - 'A'))
|
||||||
|
index = 1
|
||||||
|
}
|
||||||
|
for i := index; i < len(str); i++ {
|
||||||
|
if str[i] == '_' && i+1 < len(str) {
|
||||||
|
if str[i+1] >= 'a' && str[i+1] <= 'z' {
|
||||||
|
builder.WriteByte(str[i+1] - ('a' - 'A'))
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 将ID转为大写
|
||||||
|
if str[i] == 'd' && i-1 >= 0 && (str[i-1] == 'i' || str[i-1] == 'I') && (i+1 == len(str) || i+1 < len(str) && str[i+1] == '_') {
|
||||||
|
builder.WriteByte('d' - ('a' - 'A'))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
builder.WriteByte(str[i])
|
||||||
|
}
|
||||||
|
return builder.String()
|
||||||
|
}
|
30
struct.go
Normal file
30
struct.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : util ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-03-14 11:11 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import "encoding/json"
|
||||||
|
|
||||||
|
// StructToMap 结构体转为map
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 11:12 下午 2021/3/14
|
||||||
|
func StructToMap(data interface{}) (map[string]interface{}, error) {
|
||||||
|
var (
|
||||||
|
byteData []byte
|
||||||
|
err error
|
||||||
|
result map[string]interface{}
|
||||||
|
)
|
||||||
|
if byteData, err = json.Marshal(data); nil != err {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err = json.Unmarshal(byteData, &result); nil != err {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
19
time.go
Normal file
19
time.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Package util ...
|
||||||
|
//
|
||||||
|
// Description : 时间相关操作
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-10-07 1:33 上午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// GetCurrentFormatTime 获取当前时间的格式化时间(秒)
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 1:34 上午 2021/10/7
|
||||||
|
func GetCurrentFormatTime() string {
|
||||||
|
return time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
}
|
89
url.go
Normal file
89
url.go
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
// Package util...
|
||||||
|
//
|
||||||
|
// Description : util...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2021-11-04 2:38 下午
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// URLParseResult url解析
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2:51 下午 2021/11/4
|
||||||
|
type URLParseResult struct {
|
||||||
|
Scheme string `json:"scheme"`
|
||||||
|
Domain string `json:"domain"`
|
||||||
|
URI string `json:"uri"`
|
||||||
|
Parameter map[string]string `json:"parameter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// URLEncode ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2:39 下午 2021/11/4
|
||||||
|
func URLEncode(inputURL string) string {
|
||||||
|
return url.QueryEscape(inputURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
// URLDecode ...
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2:39 下午 2021/11/4
|
||||||
|
func URLDecode(inputURL string) (string, error) {
|
||||||
|
return url.QueryUnescape(inputURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
// URLParse url解析
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2:39 下午 2021/11/4
|
||||||
|
func URLParse(inputURL string) (*URLParseResult, error) {
|
||||||
|
var (
|
||||||
|
parseResult *url.URL
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if parseResult, err = url.Parse(inputURL); nil != err {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
detail := &URLParseResult{
|
||||||
|
Scheme: parseResult.Scheme,
|
||||||
|
Domain: parseResult.Host,
|
||||||
|
URI: parseResult.Path,
|
||||||
|
Parameter: make(map[string]string),
|
||||||
|
}
|
||||||
|
for k, v := range parseResult.Query() {
|
||||||
|
if len(v) > 1 {
|
||||||
|
detail.Parameter[k] = "[" + strings.Join(v, ",") + "]"
|
||||||
|
} else {
|
||||||
|
detail.Parameter[k] = v[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return detail, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// BuildQueryURL 构建GET链接
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 2:43 下午 2021/11/4
|
||||||
|
func BuildQueryURL(apiURL string, parameter map[string]string) string {
|
||||||
|
u := url.Values{}
|
||||||
|
for k, v := range parameter {
|
||||||
|
u.Set(k, v)
|
||||||
|
}
|
||||||
|
apiURL = strings.Trim(apiURL, "?")
|
||||||
|
if strings.Contains(apiURL, "?") {
|
||||||
|
return apiURL + "&" + u.Encode()
|
||||||
|
}
|
||||||
|
return apiURL + "?" + u.Encode()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user