diff --git a/pkg/configutils/variable.go b/pkg/configutils/variable.go index 0c1f7af..b6c0687 100644 --- a/pkg/configutils/variable.go +++ b/pkg/configutils/variable.go @@ -16,6 +16,10 @@ var regexpNamedVariable = regexp.MustCompile(`\${[\w.-]+}`) // ParseVariables 分析变量 func ParseVariables(source string, replacer func(varName string) (value string)) string { + if len(source) == 0 { + return "" + } + variableLocker.RLock() holders, found := variableMapping[source] variableLocker.RUnlock() @@ -42,16 +46,16 @@ func ParseVariables(source string, replacer func(varName string) (value string)) } // 多个占位时,使用Builder - result := strings.Builder{} + var builder = strings.Builder{} for _, h := range holders { holder, ok := h.(VariableHolder) if ok { - result.WriteString(replacer(string(holder))) + builder.WriteString(replacer(string(holder))) } else { - result.Write(h.([]byte)) + builder.Write(h.([]byte)) } } - return result.String() + return builder.String() } // ParseVariablesFromHolders 从占位中分析变量 @@ -92,5 +96,8 @@ func ParseHolders(source string) (holders VariableHolders) { // HasVariables 判断是否有变量 func HasVariables(source string) bool { + if len(source) == 0 { + return false + } return regexpNamedVariable.MatchString(source) } diff --git a/pkg/configutils/variable_test.go b/pkg/configutils/variable_test.go index 8cb2e3f..aff81f7 100644 --- a/pkg/configutils/variable_test.go +++ b/pkg/configutils/variable_test.go @@ -53,6 +53,8 @@ func BenchmarkParseVariables(b *testing.B) { return "Lu" }) + b.ResetTimer() + for i := 0; i < b.N; i++ { _ = ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string { return "Lu" @@ -95,3 +97,11 @@ func BenchmarkParseNoVariables(b *testing.B) { }) } } + +func BenchmarkParseEmpty(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = ParseVariables("", func(s string) string { + return "Lu" + }) + } +}