209 lines
3.7 KiB
Go
209 lines
3.7 KiB
Go
![]() |
package core
|
|||
|
|
|||
|
import (
|
|||
|
"crypto/md5"
|
|||
|
"encoding/hex"
|
|||
|
"encoding/json"
|
|||
|
"errors"
|
|||
|
"fmt"
|
|||
|
"math"
|
|||
|
"math/rand"
|
|||
|
"runtime"
|
|||
|
"strconv"
|
|||
|
"time"
|
|||
|
)
|
|||
|
|
|||
|
func NextPeriod(curPeriod string, idx int) string {
|
|||
|
list := []string{
|
|||
|
"1m",
|
|||
|
"3m",
|
|||
|
"5m",
|
|||
|
"15m",
|
|||
|
"30m",
|
|||
|
"1H",
|
|||
|
"2H",
|
|||
|
"4H",
|
|||
|
"6H",
|
|||
|
"12H",
|
|||
|
"1D",
|
|||
|
"2D",
|
|||
|
"5D",
|
|||
|
}
|
|||
|
nextPer := ""
|
|||
|
for i := 0; i < len(list)-1; i++ {
|
|||
|
if list[i] == curPeriod {
|
|||
|
nextPer = list[i+idx]
|
|||
|
}
|
|||
|
}
|
|||
|
return nextPer
|
|||
|
}
|
|||
|
func OtherPeriod(curPeriod string, cha int) string {
|
|||
|
list := []string{
|
|||
|
"1m",
|
|||
|
"3m",
|
|||
|
"5m",
|
|||
|
"15m",
|
|||
|
"30m",
|
|||
|
"1H",
|
|||
|
"2H",
|
|||
|
"4H",
|
|||
|
"6H",
|
|||
|
"12H",
|
|||
|
"1D",
|
|||
|
"2D",
|
|||
|
"5D",
|
|||
|
}
|
|||
|
nextPer := ""
|
|||
|
for i := 0; i < len(list)-1; i++ {
|
|||
|
if list[i] == curPeriod {
|
|||
|
if i+cha > 0 && i+cha < len(list)-1 {
|
|||
|
nextPer = list[i+cha]
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return nextPer
|
|||
|
}
|
|||
|
func ShaiziInt(n int) int {
|
|||
|
rand.Seed(time.Now().UnixNano())
|
|||
|
b := rand.Intn(n)
|
|||
|
return b
|
|||
|
}
|
|||
|
func Difference(slice1 []string, slice2 []string) []string {
|
|||
|
var diff []string
|
|||
|
|
|||
|
// Loop two times, first to find slice1 strings not in slice2,
|
|||
|
// second loop to find slice2 strings not in slice1
|
|||
|
for i := 0; i < 2; i++ {
|
|||
|
for _, s1 := range slice1 {
|
|||
|
found := false
|
|||
|
for _, s2 := range slice2 {
|
|||
|
if s1 == s2 {
|
|||
|
found = true
|
|||
|
break
|
|||
|
}
|
|||
|
}
|
|||
|
// String not found. We add it to return slice
|
|||
|
if !found {
|
|||
|
diff = append(diff, s1)
|
|||
|
}
|
|||
|
}
|
|||
|
// Swap the slices, only if it was the first loop
|
|||
|
if i == 0 {
|
|||
|
slice1, slice2 = slice2, slice1
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return diff
|
|||
|
}
|
|||
|
|
|||
|
func JsonToMap(str string) (map[string]interface{}, error) {
|
|||
|
|
|||
|
var tempMap map[string]interface{}
|
|||
|
|
|||
|
err := json.Unmarshal([]byte(str), &tempMap)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
fmt.Println("Unmarshal err: ", err, str)
|
|||
|
}
|
|||
|
|
|||
|
return tempMap, err
|
|||
|
}
|
|||
|
func Sqrt(x float64) float64 {
|
|||
|
z := 1.0
|
|||
|
for math.Abs(z*z-x) > 0.000001 {
|
|||
|
z -= (z*z - x) / (2 * z)
|
|||
|
}
|
|||
|
return z
|
|||
|
}
|
|||
|
func RecursiveBubble(ary []int64, length int) []int64 {
|
|||
|
if length == 0 {
|
|||
|
return ary
|
|||
|
}
|
|||
|
for idx, _ := range ary {
|
|||
|
if idx >= length-1 {
|
|||
|
break
|
|||
|
}
|
|||
|
temp := int64(0)
|
|||
|
if ary[idx] < ary[idx+1] { //改变成>,换成从小到大排序
|
|||
|
temp = ary[idx]
|
|||
|
ary[idx] = ary[idx+1]
|
|||
|
ary[idx+1] = temp
|
|||
|
}
|
|||
|
}
|
|||
|
length--
|
|||
|
RecursiveBubble(ary, length)
|
|||
|
return ary
|
|||
|
}
|
|||
|
|
|||
|
func Decimal(value float64) string {
|
|||
|
va := fmt.Sprintf("%.5f", value)
|
|||
|
v1, _ := strconv.ParseFloat(va, 32)
|
|||
|
v1 = v1 * 100
|
|||
|
s1 := fmt.Sprintf("%.3f", v1)
|
|||
|
return s1 + "%"
|
|||
|
}
|
|||
|
func ShortNum(value float64) string {
|
|||
|
va := fmt.Sprintf("%.5f", value)
|
|||
|
v1, _ := strconv.ParseFloat(va, 32)
|
|||
|
v1 = v1 * 100
|
|||
|
s1 := fmt.Sprintf("%.3f", v1)
|
|||
|
return s1
|
|||
|
}
|
|||
|
|
|||
|
func GetRandomString(l int) string {
|
|||
|
str := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
|||
|
bytes := []byte(str)
|
|||
|
result := []byte{}
|
|||
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|||
|
for i := 0; i < l; i++ {
|
|||
|
result = append(result, bytes[r.Intn(len(bytes))])
|
|||
|
}
|
|||
|
return string(result)
|
|||
|
}
|
|||
|
|
|||
|
func Shaizi(n int) bool {
|
|||
|
rand.Seed(time.Now().UnixNano())
|
|||
|
b := rand.Intn(n)
|
|||
|
if b == 1 {
|
|||
|
return true
|
|||
|
}
|
|||
|
return false
|
|||
|
}
|
|||
|
|
|||
|
func Sishewuru(x float64, digit int) (number float64, err error) {
|
|||
|
baseDigit := 10
|
|||
|
if digit < 0 {
|
|||
|
return x, errors.New("错误的精度,不能小于0")
|
|||
|
} else {
|
|||
|
baseDigit = pow(baseDigit, digit+1)
|
|||
|
}
|
|||
|
betweenNumber := float64(5)
|
|||
|
return (math.Floor((x*float64(baseDigit) + betweenNumber) / 10)) / float64(baseDigit/10), err
|
|||
|
}
|
|||
|
|
|||
|
func pow(x, n int) int {
|
|||
|
ret := 1 // 结果初始为0次方的值,整数0次方为1。如果是矩阵,则为单元矩阵。
|
|||
|
for n != 0 {
|
|||
|
if n%2 != 0 {
|
|||
|
ret = ret * x
|
|||
|
}
|
|||
|
n /= 2
|
|||
|
x = x * x
|
|||
|
}
|
|||
|
return ret
|
|||
|
}
|
|||
|
|
|||
|
// 获取当前函数名字
|
|||
|
func GetFuncName() string {
|
|||
|
pc := make([]uintptr, 1)
|
|||
|
runtime.Callers(2, pc)
|
|||
|
f := runtime.FuncForPC(pc[0])
|
|||
|
return f.Name()
|
|||
|
}
|
|||
|
|
|||
|
func Md5V(str string) string {
|
|||
|
h := md5.New()
|
|||
|
h.Write([]byte(str))
|
|||
|
return hex.EncodeToString(h.Sum(nil))
|
|||
|
}
|