From 0da37a784338f75dd2680142b4db32b0534b65d2 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 4 Apr 2022 16:42:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/configutils/variable.go | 15 +++++++++++---- pkg/configutils/variable_test.go | 10 ++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) 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" + }) + } +}