mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 02:48:34 +08:00
81 lines
1.4 KiB
Go
81 lines
1.4 KiB
Go
package tool
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
// SnakeString snake string, XxYy to xx_yy , XxYY to xx_y_y
|
|
func SnakeString(s string) string {
|
|
data := make([]byte, 0, len(s)*2)
|
|
j := false
|
|
num := len(s)
|
|
for i := 0; i < num; i++ {
|
|
d := s[i]
|
|
if i > 0 && d >= 'A' && d <= 'Z' && j {
|
|
data = append(data, '_')
|
|
}
|
|
if d != '_' {
|
|
j = true
|
|
}
|
|
data = append(data, d)
|
|
}
|
|
return strings.ToLower(string(data))
|
|
}
|
|
|
|
// CamelString camel string, xx_yy to XxYy
|
|
func CamelString(s string) string {
|
|
data := make([]byte, 0, len(s))
|
|
flag, num := true, len(s)-1
|
|
for i := 0; i <= num; i++ {
|
|
d := s[i]
|
|
if d == '_' {
|
|
flag = true
|
|
continue
|
|
} else if flag {
|
|
if d >= 'a' && d <= 'z' {
|
|
d = d - 32
|
|
}
|
|
flag = false
|
|
}
|
|
data = append(data, d)
|
|
}
|
|
return string(data)
|
|
}
|
|
|
|
func FirstLowCamelString(s string) string {
|
|
data := make([]byte, 0, len(s))
|
|
flag, num := true, len(s)-1
|
|
for i := 0; i <= num; i++ {
|
|
d := s[i]
|
|
if d == '_' {
|
|
flag = true
|
|
continue
|
|
} else if flag {
|
|
if d >= 'a' && d <= 'z' {
|
|
d = d - 32
|
|
}
|
|
flag = false
|
|
}
|
|
data = append(data, d)
|
|
}
|
|
if len(data) > 0 && data[0] >= 65 && data[0] <= 90 {
|
|
data[0] = data[0] + 32
|
|
}
|
|
return string(data)
|
|
}
|
|
|
|
func MapToStruct(m map[string]interface{}, s interface{}) error {
|
|
data, err := json.Marshal(m)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = json.Unmarshal(data, s)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|