登录
首页 >  Golang >  Go问答

Go 语言中是否有更标准的方式处理 URL 路径?

来源:stackoverflow

时间:2024-03-04 21:06:26 252浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Go 语言中是否有更标准的方式处理 URL 路径?》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我正在开发一个 go 系统作为中间件。对于我想要解析和分析的其他服务中的一些 url,我们在路径的开头嵌入了一些变量。

例如,假设对于用户 amysmith,我们可能有路径 /amysmith/edit/profile 来编辑 amysmith 的用户配置文件。

出于此系统的目的,我想将路径交换为 /edit/profile,就好像路径的第一部分不存在一样。诚然,这并不理想,但改变整体命名是另一个更大的项目。

这可以通过使用 strings.join 然后在前面添加 / 并删除最后一个字符来实现。我想这样做是因为它使路径格式与其他未操作的路径保持一致,这些路径始终以 / 开头。

func (r Resource) CleanedPath() string {
    parts := strings.Split(r.URL.Path, "/")
    return strings.TrimRight("/" + strings.Join(parts[2:], "/"), "/")
}

这种方法对我来说有点笨拙。有没有更好的“go”方式来做到这一点?


正确答案


砍掉第二个 / 之前的所有内容。

func cleanpath(p string) string {
    if i := strings.indexbyte(p[len("/"):], '/'); i >= 0 {
        return p[i+len("/"):]
    }
    return p
}

这种方法避免了内存分配。

这是一种不使用包的方法:

package main

func split(path string, count int) string {
   for n, r := range path {
      if r == '/' { count-- }
      if count == 0 {
         return path[n:]
      }
   }
   return ""
}

func main() {
   { // example 1
      s := split("/amysmith/edit/profile", 2)
      println(s == "/edit/profile")
   }
   { // example 2
      s := split("/amysmith/edit/profile", 3)
      println(s == "/profile")
   }
}

今天关于《Go 语言中是否有更标准的方式处理 URL 路径?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>