mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-07 23:30:25 +08:00
优化代码
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user