-
Notifications
You must be signed in to change notification settings - Fork 0
/
strs.go
55 lines (50 loc) · 1.25 KB
/
strs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package strs
import "strings"
func FirstLetterToUpper(s string) string {
if len(s) > 0 && s[0] >= 'a' && s[0] <= 'z' {
b := []byte(s)
b[0] -= ('a' - 'A')
return string(b)
}
return s
}
func FirstLetterToLower(s string) string {
if len(s) > 0 && s[0] >= 'A' && s[0] <= 'Z' {
b := []byte(s)
b[0] += ('a' - 'A')
return string(b)
}
return s
}
func CamelToSnake(str string) string {
var slice []string
start := 0
for end, current := range str {
if end+1 < len(str) {
next := str[end+1]
if current < 'A' || current > 'Z' {
if next >= 'A' && next <= 'Z' {
// current is not upper, and next is upper
slice = append(slice, str[start:end+1])
start = end + 1
}
} else if end+2 < len(str) && (next >= 'A' && next <= 'Z') {
if next2 := str[end+2]; next2 < 'A' || next2 > 'Z' {
// current is upper, next is upper, and next2 is not upper
slice = append(slice, str[start:end+1])
start = end + 1
}
}
} else {
slice = append(slice, str[start:end+1])
}
}
return strings.ToLower(strings.Join(slice, "_"))
}
func SnakeToCamel(column string) string {
var parts []string
for _, part := range strings.Split(column, "_") {
parts = append(parts, FirstLetterToUpper(part))
}
return strings.Join(parts, "")
}