pcm-coordinator/pkg/utils/convert.go

104 lines
2.2 KiB
Go

package utils
import (
"encoding/json"
"fmt"
"github.com/robfig/cron/v3"
"io"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"mime/multipart"
"sigs.k8s.io/yaml"
"strconv"
"strings"
)
// Convert 通过JSON赋值
func Convert(source interface{}, target interface{}) {
jsonByte, _ := json.Marshal(source)
json.Unmarshal(jsonByte, &target)
}
// Int64ToString int64转string
func Int64ToString(value int64) string {
return strconv.FormatInt(value, 10)
}
// EntryIdToString EntryID转string
func EntryIdToString(id cron.EntryID) string {
return strconv.Itoa(int(id))
}
func StringToInt(value string) int {
intValue, _ := strconv.Atoi(value)
return intValue
}
func StringToInt64(value string) int64 {
intValue, _ := strconv.ParseInt(value, 10, 64)
return intValue
}
func StringToFloat64(value string) float64 {
floatValue, _ := strconv.ParseFloat(value, 64)
return floatValue
}
func RunTimeToSeconds(runTime string) int {
time := strings.Split(runTime, ":")
day, _ := strconv.Atoi(time[0])
hour, _ := strconv.Atoi(time[1])
seconds, _ := strconv.Atoi(time[2])
return day*3600 + hour*60 + seconds
}
func Yaml2struct(fileHeader *multipart.FileHeader, req interface{}) error {
file, err := fileHeader.Open()
if err != nil {
return err
}
fileByte, err := io.ReadAll(file)
if err != nil {
return err
}
err = yaml.Unmarshal(fileByte, &req)
if err != nil {
return err
}
return nil
}
func K8sUnstructured(dataString string, target interface{}) {
unstructuredList := unstructured.UnstructuredList{}
json.Unmarshal([]byte(dataString), &unstructuredList)
runtime.DefaultUnstructuredConverter.FromUnstructured(unstructuredList.UnstructuredContent(), target)
}
// removeDuplication_map 去重数组
func RemoveDuplication_map(arr []string) []string {
set := make(map[string]struct{}, len(arr))
j := 0
for _, v := range arr {
_, ok := set[v]
if ok {
continue
}
set[v] = struct{}{}
arr[j] = v
j++
}
return arr[:j]
}
func ConvertStructToMap(in interface{}) map[string]string {
out := make(map[string]string)
b, _ := json.Marshal(&in)
var m map[string]interface{}
_ = json.Unmarshal(b, &m)
for k, v := range m {
out[k] = fmt.Sprintf("%v", v)
}
return out
}