SetNameToUri增加驼峰命名规则的名称转换方式

This commit is contained in:
John
2018-08-12 12:36:02 +08:00
parent 84a423329c
commit 4147a039ff
3 changed files with 28 additions and 4 deletions

View File

@ -22,6 +22,7 @@ const (
NAME_TO_URI_TYPE_DEFAULT = 0 // 服务注册时对象和方法名称转换为URI时全部转为小写单词以'-'连接符号连接
NAME_TO_URI_TYPE_FULLNAME = 1 // 不处理名称以原有名称构建成URI
NAME_TO_URI_TYPE_ALLLOWER = 2 // 仅转为小写,单词间不使用连接符号
NAME_TO_URI_TYPE_CAMEL = 3 // 采用驼峰命名方式
)
// HTTP Server 设置结构体,静态配置

View File

@ -11,6 +11,7 @@ import (
"errors"
"strings"
"gitee.com/johng/gf/g/util/gstr"
"bytes"
)
// 注意该方法是直接绑定函数的内存地址,执行的时候直接执行该方法,不会存在初始化新的控制器逻辑
@ -69,22 +70,39 @@ func (s *Server) mergeBuildInNameToPattern(pattern string, structName, methodNam
// 规则0: 全部转换为小写方法名中间存在大写字母转换为小写URI地址以“-”号链接每个单词;
// 规则1: 不处理名称以原有名称构建成URI
// 规则2: 仅转为小写,单词间不使用连接符号
// 规则3: 采用驼峰命名方式
func (s *Server) nameToUrlPart(name string) string {
switch s.nameToUriType.Val() {
case NAME_TO_URI_TYPE_FULLNAME:
return name
case NAME_TO_URI_TYPE_ALLLOWER:
return strings.ToLower(name)
case NAME_TO_URI_TYPE_CAMEL:
part := bytes.NewBuffer(nil)
if gstr.IsLetterUpper(name[0]) {
part.WriteByte(name[0] + 32)
} else {
part.WriteByte(name[0])
}
part.WriteString(name[1:])
return part.String()
case NAME_TO_URI_TYPE_DEFAULT:
fallthrough
default:
part := ""
part := bytes.NewBuffer(nil)
for i := 0; i < len(name); i++ {
if i > 0 && gstr.IsLetterUpper(name[i]) {
part += "-"
part.WriteByte('-')
}
if gstr.IsLetterUpper(name[i]) {
part.WriteByte(name[i] + 32)
} else {
part.WriteByte(name[i])
}
part += string(name[i])
}
return strings.ToLower(part)
return part.String()
}
}

View File

@ -15,22 +15,27 @@ func main() {
s1 := g.Server(1)
s2 := g.Server(2)
s3 := g.Server(3)
s4 := g.Server(4)
s1.SetNameToUriType(ghttp.NAME_TO_URI_TYPE_DEFAULT)
s2.SetNameToUriType(ghttp.NAME_TO_URI_TYPE_FULLNAME)
s3.SetNameToUriType(ghttp.NAME_TO_URI_TYPE_ALLLOWER)
s4.SetNameToUriType(ghttp.NAME_TO_URI_TYPE_CAMEL)
s1.BindObject("/{.struct}/{.method}", new(User))
s2.BindObject("/{.struct}/{.method}", new(User))
s3.BindObject("/{.struct}/{.method}", new(User))
s4.BindObject("/{.struct}/{.method}", new(User))
s1.SetPort(8100)
s2.SetPort(8200)
s3.SetPort(8300)
s4.SetPort(8400)
s1.Start()
s2.Start()
s3.Start()
s4.Start()
g.Wait()
}