我有这个端点定义:
router.NotFoundHandler = http.HandlerFunc(handlerNotFound)
router.HandleFunc("/customer/{id}", handlerCustUpd).Methods(http.MethodPut)
当调用 URL
https://example.com/customer
或 https://example.com/customer
时,它永远不会到达 handlerCustUpd ,我可以在其中检查是否存在,也不会到达 handlerNotFound ,也不会返回通用 404 Not Found
错误。它返回 Error: socket hang up
,因为服务器因以下原因失败:
http: panic serving 127.0.0.1:60440: interface conversion: interface {} is nil, not string\ngoroutine 132 [running]:\nnet/http.(*conn).serve.func1()\n\t/usr/local/Cellar/go/1.22.6/libexec/src/net/http/server.go:1903 +0xbe\npanic({0xc05d3a0?, 0xc000c78420?})\n\t/usr/local/Cellar/go/1.22.6/libexec/src/runtime/panic.go:770 +0x132\nbackend/vendors/nexuri.handlerNotFound({0xc11b4f0, 0xc000c36460}, 0xc000c166c0)\n\t/Users/tku/Data/Projects/nexuri/nexuri-backend/backend/vendors/nexuri/handlers-general.go:38 +0x346\nnet/http.HandlerFunc.ServeHTTP(0xc000c165a0?, {0xc11b4f0?, 0xc000c36460?}, 0xc00001b908?)\n\t/usr/local/Cellar/go/1.22.6/libexec/src/net/http/server.go:2171 +0x29\ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000180240, {0xc11b4f0, 0xc000c36460}, 0xc000c16480)\n\t/Users/tku/go/pkg/mod/github.com/gorilla/[email protected]/mux.go:212 +0x1e2\ngithub.com/gorilla/handlers.(*cors).ServeHTTP(0xc000194b40, {0xc11b4f0, 0xc000c36460}, 0xc000c16480)\n\t/Users/tku/go/pkg/mod/github.com/gorilla/[email protected]/cors.go:54 +0x335\nnet/http.serverHandler.ServeHTTP({0xc119df0?}, {0xc11b4f0?, 0xc000c36460?}, 0x6?)\n\t/usr/local/Cellar/go/1.22.6/libexec/src/net/http/server.go:3142 +0x8e\nnet/http.(*conn).serve(0xc0002785a0, {0xc11ca80, 0xc0000f0db0})\n\t/usr/local/Cellar/go/1.22.6/libexec/src/net/http/server.go:2044 +0x5e8\ncreated by net/http.(*Server).Serve in goroutine 78\n\t/usr/local/Cellar/go/1.22.6/libexec/src/net/http/server.go:3290 +0x4b4"
任何想法,如何:
我唯一能弄清楚的是有明确的
PUT: /customer
端点并检查这一点。对于几个端点来说这是可能的,但对于数百个端点来说这是完全不可能的。
我尝试研究 gorilla 包的下一个和文档,并尝试了 ChatGPT。 ;)
提前致谢!
@BurakSerdar 指出了这个问题的解决方案。
handlerNotFound 已正确处理,但由于我使用了尚未设置的上下文(由于未运行中间件 - 这是合乎逻辑的)。
删除此允许返回自定义响应。就我而言,状态 404 未找到状态。