我正在尝试使用字符串替换多个不同的字符,Replacer但是在替换一个字符串时遇到问题.输出有两个下划线而不是一个,如果我尝试使用其他替换Replacer,那么它不能完全替换它.
试试Go Playground上的代码:
package main
import (
"fmt"
"strings"
)
//Expecting output to be emp_my_stats
func main() {
var input string = "/v1.0/emp/emp_1/my_stats"
replacer := strings.NewReplacer("/v1.0/", "", "/", "_", "emp_1", "")
// replacer := strings.NewReplacer("/v1.0/", "", "/", "_", "/emp_1", "")
output := replacer.Replace(input)
fmt.Printf("output %v", output)
}
Run Code Online (Sandbox Code Playgroud)
我可以使用多个Replacer等但是真的想在一个通道/或一个语句中执行它.
有什么建议干净利落的吗?我的目标是提高效率(这将经常完成,虽然这些字符串很短很重要),也不会使用多个Replacers.
您尚未指定任何其他可能的输入,但它看起来如下:
input := "/v1.0/emp/emp_1/my_stats"
Run Code Online (Sandbox Code Playgroud)
您需要与下划线连接的部件"emp"和"my_stats"部件'_'.而你尝试的替代品来看,"/v1.0/"和"/emp_1/"部分是静态的,所以你可以简单地做这一个替代品:
replacer := strings.NewReplacer("/v1.0/", "", "/emp_1/", "_")
Run Code Online (Sandbox Code Playgroud)
完整的例子:
input := "/v1.0/emp/emp_1/my_stats"
replacer := strings.NewReplacer("/v1.0/", "", "/emp_1/", "_")
output := replacer.Replace(input)
fmt.Println("Output:", output)
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
Output: emp_my_stats
Run Code Online (Sandbox Code Playgroud)
笔记:
你提到你必须经常这样做,你希望这是有效的.因此,请确保只创建一个Replacer,并在需要进行替换时重用它(例如,您可以将其存储在初始化一次的全局变量中).根据您的输入判断,它看起来像是某个URL的路径,并且您最希望这样做的是HTTP处理程序,它可以在多个goroutine上并发运行.Replacer从多个goroutines中使用它是安全的,引用来自以下文档Replacer:
多个goroutine可以安全地同时使用.
注释#2:
如果输入中的"/v1.0/"和"/emp_1/"部分不是静态的,则无法用a真正解决问题Replacer.在这种情况下,您可以使用正则表达式或作为更有效的解决方案,拆分字符串'/'并将相关部分连接起来'_'.