mirror of
https://gitee.com/johng/gf
synced 2026-07-04 13:02:36 +08:00
SetNameToUri增加驼峰命名规则的名称转换方式
This commit is contained in:
@ -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 设置结构体,静态配置
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user