-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcase.go
More file actions
91 lines (78 loc) · 1.97 KB
/
Copy pathcase.go
File metadata and controls
91 lines (78 loc) · 1.97 KB
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
import (
"errors"
"strings"
"unicode"
)
type CaseType string
// # 下划线 underscore
// # 大驼峰 upper_camel_case
// # 小驼峰 lower_camel_case
const (
CaseTypeUnderscore CaseType = "underscore"
CaseTypeUpperCamelCase CaseType = "upper_camel_case"
CaseTypeLowerCamelCase CaseType = "lower_camel_case"
)
var (
CaseErrorNotSupport = errors.New("暂不支持该类型转换")
CaseErrorNotFound = errors.New("未找到对应类型")
)
func ToCase(oldType, newType CaseType, s string) (string, error) {
var caseNaming CaseNaming
switch oldType {
case CaseTypeUnderscore:
caseNaming = NewUnderScoreCase(s)
case CaseTypeUpperCamelCase:
return "", CaseErrorNotSupport
case CaseTypeLowerCamelCase:
return "", CaseErrorNotSupport
default:
return "", CaseErrorNotFound
}
var result string
switch newType {
case CaseTypeUnderscore:
result = caseNaming.ToUnderscore()
case CaseTypeUpperCamelCase:
result = caseNaming.ToUpperCamelCase()
case CaseTypeLowerCamelCase:
result = caseNaming.ToLowerCamelCase()
default:
return "", CaseErrorNotFound
}
return result, nil
}
type CaseNaming interface {
// ToUnderscore 下划线命名法
ToUnderscore() string
// ToUpperCamelCase 大驼峰命名法
ToUpperCamelCase() string
// ToLowerCamelCase 小驼峰命名法
ToLowerCamelCase() string
}
// underScoreCase 下划线命名的字符串
type underScoreCase struct {
s string
}
func NewUnderScoreCase(s string) *underScoreCase {
return &underScoreCase{
s: s,
}
}
// ToUnderscore 转下划线命名法
func (c *underScoreCase) ToUnderscore() string {
return c.s
}
// ToUpperCamelCase 转大驼峰命名法
func (c *underScoreCase) ToUpperCamelCase() string {
s := c.s
s = strings.Replace(s, "_", " ", -1)
s = strings.Title(s)
s = strings.Replace(s, " ", "", -1)
return s
}
// ToLowerCamelCase 转小驼峰命名法
func (c *underScoreCase) ToLowerCamelCase() string {
s := c.ToUpperCamelCase()
return string(unicode.ToLower(rune(s[0]))) + s[1:]
}