英文:
Google App Engine with Golang: How do you parse URL path segments as variables?
问题
在Google App Engine中使用Go语言,我想将以下URL:
http://www.example.com/api/account/123456/product/573832
处理成这样:
http://www.example.com/api/account/{acctId}/product/{prodId}
然后在我的处理函数中访问acctId
和prodId
。
我该如何实现这个功能?
英文:
In Google App Engine with Go, I would like to take a URL like this:
http://www.example.com/api/account/123456/product/573832
and treat it like this:
http://www.example.com/api/account/{acctId}/product/{prodId}
Then access acctId
and prodId
in my handler function.
How do I do this?
答案1
得分: 8
这是你要翻译的内容:
func httpHandle(httpResponse http.ResponseWriter, httpRequest *http.Request) {
urlPart := strings.Split(httpRequest.URL.Path, "/")
// urlPart[3] 是 acctId,urlPart[5] 是 prodId
}
请注意,我只翻译了代码部分,其他内容都被忽略了。如果你还有其他问题,请告诉我。
英文:
There you are:
func httpHandle(httpResponse http.ResponseWriter, httpRequest *http.Request) {
urlPart := strings.Split(httpRequest.URL.Path, "/")
// urlPart[3] is the acctId, urlPart[5] is the prodId
}
答案2
得分: 1
httprouter似乎快速且简单。如果你需要一个更高级、复杂的路由框架,那就去找别的吧。
go get github.com/julienschmidt/httprouter
然后:
package goseo
import (
"fmt"
"net/http"
"github.com/julienschmidt/httprouter"
)
func init() {
router := httprouter.New()
router.GET("/", index)
http.Handle("/", router)
}
func index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
fmt.Fprint(w, "Hello, world!")
}
示例匹配:
模式:/user/:user
- /user/gordon 匹配
- /user/you 匹配
- /user/gordon/profile 不匹配
- /user/ 不匹配
更多示例请参考:https://github.com/julienschmidt/httprouter
此外,我有一个app.yaml文件:
application: student-course-review
module: goseo
version: goseo1
runtime: go
api_version: go1
handlers:
- url: /static/(.+)
static_files: static/
upload: static/(.*)
- url: /.*
script: _go_app
英文:
httprouter seems to be fast and simplistic. If you need a more advanced sophisticated routing framework then look elsewhere?
go get github.com/julienschmidt/httprouter
then:
package goseo
import (
"fmt"
"net/http"
"github.com/julienschmidt/httprouter"
)
func init() {
router := httprouter.New()
router.GET("/", index)
http.Handle("/", router)
}
func index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
fmt.Fprint(w, "Hello, world!")
}
example matches:
Pattern: /user/:user
/user/gordon match
/user/you match
/user/gordon/profile no match
/user/ no match
further examples:
https://github.com/julienschmidt/httprouter
Further, I have an app.yaml:
application: student-course-review
module: goseo
version: goseo1
runtime: go
api_version: go1
handlers:
- url: /static/(.+)
static_files: static/
upload: static/(.*)
- url: /.*
script: _go_app
答案3
得分: -1
你可能想考虑使用一个库,比如"httprouter"来实现这个功能。这个指南可能会帮助你选择一个合适的库。
英文:
You might want to consider using a library, like "httprouter" for this. This guide might help you choose one.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论