From 4147a039ff3b68d47200d4b96a68f1579c7cd02b Mon Sep 17 00:00:00 2001 From: John Date: Sun, 12 Aug 2018 12:36:02 +0800 Subject: [PATCH] =?UTF-8?q?SetNameToUri=E5=A2=9E=E5=8A=A0=E9=A9=BC?= =?UTF-8?q?=E5=B3=B0=E5=91=BD=E5=90=8D=E8=A7=84=E5=88=99=E7=9A=84=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E8=BD=AC=E6=8D=A2=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/ghttp_server_config.go | 1 + g/net/ghttp/ghttp_server_service_handler.go | 26 +++++++++++++++++---- geg/net/ghttp/server/name.go | 5 ++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/g/net/ghttp/ghttp_server_config.go b/g/net/ghttp/ghttp_server_config.go index 262b2cf0e..d75519b73 100644 --- a/g/net/ghttp/ghttp_server_config.go +++ b/g/net/ghttp/ghttp_server_config.go @@ -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 设置结构体,静态配置 diff --git a/g/net/ghttp/ghttp_server_service_handler.go b/g/net/ghttp/ghttp_server_service_handler.go index aacd2bba6..22cec78df 100644 --- a/g/net/ghttp/ghttp_server_service_handler.go +++ b/g/net/ghttp/ghttp_server_service_handler.go @@ -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() } } \ No newline at end of file diff --git a/geg/net/ghttp/server/name.go b/geg/net/ghttp/server/name.go index 9000d48f5..fbeedac06 100644 --- a/geg/net/ghttp/server/name.go +++ b/geg/net/ghttp/server/name.go @@ -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() }