mirror of
https://github.com/golang/go
synced 2024-11-26 01:07:57 -07:00
expvar: avoid conflict with user-defined "GET /" route.
With the new routing style in go 1.22, declaring http.Handle("GET /", h) generates a conflict with route "/debug/vars" declared in the expvar package. You get an error such as: panic: pattern "GET /" (registered at ...) conflicts with pattern "/debug/vars" (registered at ...expvar.go:384): GET / matches fewer methods than /debug/vars, but has a more general path pattern This patch prevents that error. Adding GET is correct because no other method makes sense with /debug/vars. However, a tool using any other methods will break. We preserve the traditional behaviour when GODEBUG=httpmuxgo121=1 is specified. Fixes #65723
This commit is contained in:
parent
b634f6fdcb
commit
9c2b9f74a7
@ -4,7 +4,8 @@
|
||||
|
||||
// Package expvar provides a standardized interface to public variables, such
|
||||
// as operation counters in servers. It exposes these variables via HTTP at
|
||||
// /debug/vars in JSON format.
|
||||
// /debug/vars in JSON format. As of Go 1.22, the /debug/vars request must
|
||||
// use GET.
|
||||
//
|
||||
// Operations to set or modify these public variables are atomic.
|
||||
//
|
||||
@ -23,6 +24,7 @@ package expvar
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"internal/godebug"
|
||||
"log"
|
||||
"math"
|
||||
"net/http"
|
||||
@ -381,7 +383,11 @@ func memstats() any {
|
||||
}
|
||||
|
||||
func init() {
|
||||
http.HandleFunc("/debug/vars", expvarHandler)
|
||||
if godebug.New("httpmuxgo121").Value() == "1" {
|
||||
http.HandleFunc("/debug/vars", expvarHandler)
|
||||
} else {
|
||||
http.HandleFunc("GET /debug/vars", expvarHandler)
|
||||
}
|
||||
Publish("cmdline", Func(cmdline))
|
||||
Publish("memstats", Func(memstats))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user