mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +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