diff --git a/core/stringx/strings.go b/core/stringx/strings.go index c0c4510c..155c8b3e 100644 --- a/core/stringx/strings.go +++ b/core/stringx/strings.go @@ -2,6 +2,7 @@ package stringx import ( "errors" + "unicode" "github.com/zeromicro/go-zero/core/lang" ) @@ -168,6 +169,15 @@ func TakeWithPriority(fns ...func() string) string { return "" } +// ToCamelCase returns the string that converts the first letter to lowercase. +func ToCamelCase(s string) string { + for i, v := range s { + return string(unicode.ToLower(v)) + s[i+1:] + } + + return "" +} + // Union merges the strings in first and second. func Union(first, second []string) []string { set := make(map[string]lang.PlaceholderType) diff --git a/core/stringx/strings_test.go b/core/stringx/strings_test.go index 6ef8755e..2caffd3e 100644 --- a/core/stringx/strings_test.go +++ b/core/stringx/strings_test.go @@ -396,6 +396,61 @@ func TestTakeWithPriority(t *testing.T) { } } +func TestToCamelCase(t *testing.T) { + tests := []struct { + input string + expect string + }{ + { + input: "", + expect: "", + }, + { + input: "A", + expect: "a", + }, + { + input: "a", + expect: "a", + }, + { + input: "hello_world", + expect: "hello_world", + }, + { + input: "Hello_world", + expect: "hello_world", + }, + { + input: "hello_World", + expect: "hello_World", + }, + { + input: "helloWorld", + expect: "helloWorld", + }, + { + input: "HelloWorld", + expect: "helloWorld", + }, + { + input: "hello World", + expect: "hello World", + }, + { + input: "Hello World", + expect: "hello World", + }, + } + + for _, test := range tests { + test := test + t.Run(test.input, func(t *testing.T) { + assert.Equal(t, test.expect, ToCamelCase(test.input)) + }) + } +} + func TestUnion(t *testing.T) { first := []string{ "one",