You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

convert.go 3.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. Copyright (c) [2023] [pcm]
  3. [pcm-coordinator] is licensed under Mulan PSL v2.
  4. You can use this software according to the terms and conditions of the Mulan PSL v2.
  5. You may obtain a copy of Mulan PSL v2 at:
  6. http://license.coscl.org.cn/MulanPSL2
  7. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
  8. EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
  9. MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  10. See the Mulan PSL v2 for more details.
  11. */
  12. package utils
  13. import (
  14. "encoding/json"
  15. "fmt"
  16. "github.com/robfig/cron/v3"
  17. "io"
  18. "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
  19. "k8s.io/apimachinery/pkg/runtime"
  20. "mime/multipart"
  21. "sigs.k8s.io/yaml"
  22. "strconv"
  23. "strings"
  24. )
  25. // Convert 通过JSON赋值
  26. func Convert(source interface{}, target interface{}) {
  27. jsonByte, _ := json.Marshal(source)
  28. json.Unmarshal(jsonByte, &target)
  29. }
  30. // Int64ToString int64转string
  31. func Int64ToString(value int64) string {
  32. return strconv.FormatInt(value, 10)
  33. }
  34. // EntryIdToString EntryID转string
  35. func EntryIdToString(id cron.EntryID) string {
  36. return strconv.Itoa(int(id))
  37. }
  38. func StringToInt(value string) int {
  39. intValue, _ := strconv.Atoi(value)
  40. return intValue
  41. }
  42. func StringToInt64(value string) int64 {
  43. intValue, _ := strconv.ParseInt(value, 10, 64)
  44. return intValue
  45. }
  46. func StringToFloat64(value string) float64 {
  47. floatValue, _ := strconv.ParseFloat(value, 64)
  48. return floatValue
  49. }
  50. func RunTimeToSeconds(runTime string) int {
  51. time := strings.Split(runTime, ":")
  52. day, _ := strconv.Atoi(time[0])
  53. hour, _ := strconv.Atoi(time[1])
  54. seconds, _ := strconv.Atoi(time[2])
  55. return day*3600 + hour*60 + seconds
  56. }
  57. func Yaml2struct(fileHeader *multipart.FileHeader, req interface{}) error {
  58. file, err := fileHeader.Open()
  59. if err != nil {
  60. return err
  61. }
  62. fileByte, err := io.ReadAll(file)
  63. if err != nil {
  64. return err
  65. }
  66. err = yaml.Unmarshal(fileByte, &req)
  67. if err != nil {
  68. return err
  69. }
  70. return nil
  71. }
  72. func K8sUnstructured(dataString string, target interface{}) {
  73. unstructuredList := unstructured.UnstructuredList{}
  74. json.Unmarshal([]byte(dataString), &unstructuredList)
  75. runtime.DefaultUnstructuredConverter.FromUnstructured(unstructuredList.UnstructuredContent(), target)
  76. }
  77. // removeDuplication_map 去重数组
  78. func RemoveDuplication_map(arr []string) []string {
  79. set := make(map[string]struct{}, len(arr))
  80. j := 0
  81. for _, v := range arr {
  82. _, ok := set[v]
  83. if ok {
  84. continue
  85. }
  86. set[v] = struct{}{}
  87. arr[j] = v
  88. j++
  89. }
  90. return arr[:j]
  91. }
  92. func ConvertStructToMap(in interface{}) map[string]string {
  93. out := make(map[string]string)
  94. b, _ := json.Marshal(&in)
  95. var m map[string]interface{}
  96. _ = json.Unmarshal(b, &m)
  97. for k, v := range m {
  98. out[k] = fmt.Sprintf("%v", v)
  99. }
  100. return out
  101. }
  102. func StringToYaml(in string) *string {
  103. // 将Go字符串转换为字节数组
  104. byteArray := []byte(in)
  105. // 解析YAML数据
  106. var yamlData map[string]interface{}
  107. err := yaml.Unmarshal(byteArray, &yamlData)
  108. // 将解析后的数据转换为YAML格式
  109. yamlString, err := yaml.Marshal(yamlData)
  110. if err != nil {
  111. fmt.Println(err)
  112. }
  113. resp := string(yamlString)
  114. return &resp
  115. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.