You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中如何在函数内获取URL路径参数id的值?

解决方法

注意:你用的是标准库http.ServeMux,不支持/{id}参数化路由

标准库的ServeMux只支持简单的前缀/后缀匹配,像/{id}这种动态参数语法是第三方路由库(比如gorilla/mux)的特性,所以原代码的路由规则不会生效。

方案1:使用gorilla/mux(推荐)

先安装依赖库:

go get github.com/gorilla/mux

修改后的完整代码:

import (
    "log"
    "net/http"
    "github.com/gorilla/mux"
)

func InitRouter() {
    r := mux.NewRouter()
    // {id}会匹配任意非斜杠的路径段
    r.HandleFunc("/{id}", getWords)
    log.Fatal(http.ListenAndServe(":8000", r))
}

func getWords(w http.ResponseWriter, r *http.Request) {
    // 从请求中提取路由参数
    vars := mux.Vars(r)
    id := vars["id"]
    // 输出id到响应,也可以打印到日志
    w.Write([]byte(id))
    log.Println(id)
}

这样访问localhost:8000/cat时,getWords会输出cat;访问localhost:8000/3时输出3。

方案2:坚持使用标准库http.ServeMux

如果不想引入第三方库,可以手动解析路径:

import (
    "log"
    "net/http"
    "strings"
)

func InitRouter() {
    r := http.NewServeMux()
    // 匹配所有根路径下的请求(包含子路径)
    r.HandleFunc("/", getWords)
    log.Fatal(http.ListenAndServe(":8000", r))
}

func getWords(w http.ResponseWriter, r *http.Request) {
    // 去掉路径前缀"/",得到id部分
    id := strings.TrimPrefix(r.URL.Path, "/")
    // 处理直接访问根路径的情况
    if id == "" {
        w.Write([]byte("请输入有效的ID"))
        return
    }
    w.Write([]byte(id))
    log.Println(id)
}

这个方法会匹配所有以/开头的请求,需要额外处理根路径访问的场景。

内容的提问来源于stack exchange,提问作者Haroune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:26:08