2 回答
TA贡献1876条经验 获得超5个赞
您还没有指定任何其他可能的输入,但它看起来是这样的:
input := "/v1.0/emp/emp_1/my_stats"
您需要用下划线连接"emp"和"my_stats"部分'_'。而你尝试的替代品来看,"/v1.0/"和"/emp_1/"部分是静态的,所以你可以简单地做这一个替代品:
replacer := strings.NewReplacer("/v1.0/", "", "/emp_1/", "_")
完整示例:
input := "/v1.0/emp/emp_1/my_stats"
replacer := strings.NewReplacer("/v1.0/", "", "/emp_1/", "_")
output := replacer.Replace(input)
fmt.Println("Output:", output)
输出(在Go Playground上试试):
Output: emp_my_stats
笔记:
您提到您必须经常执行此操作,并且您希望此操作有效。因此,请确保您只创建一个Replacer,并在需要进行替换时重用它(例如,您可以将其存储在初始化一次的全局变量中)。从您的输入来看,它看起来像是某个 URL 的路径,而您最有可能想要这样做的是 HTTP 处理程序,它可能在多个 goroutine 上同时运行。使用Replacer来自多个 goroutine 的a 是安全的,引用自以下文档Replacer:
多个 goroutine 并发使用是安全的。
注释#2:
如果输入中的"/v1.0/"和"/emp_1/"部分不是静态的,那么您无法真正用Replacer. 在这种情况下,您可以使用 regexp 或作为更有效的解决方案,将字符串拆分为'/'并将相关部分与'_'.
TA贡献1788条经验 获得超4个赞
strings.Split 可能会完成你想要的:
package main
import (
"fmt"
"strings"
)
//Expecting output to be emp_my_stats
func main() {
input := "/v1.0/emp/emp_1/my_stats"
xs := strings.Split(input, "/")
fmt.Println(xs)
fmt.Println(xs[4])
fmt.Println(xs[3] + xs[4])
fmt.Println(xs[3][:4] + xs[4])
fmt.Println(xs[3][:len(xs[3])-1] + xs[4])
}
以上产生了这个输出:
[ v1.0 emp emp_1 my_stats]
my_stats
emp_1my_stats
emp_my_stats
emp_my_stats
您可以在此处在go Playground上看到它的运行情况。
- 2 回答
- 0 关注
- 156 浏览
添加回答
举报