任何帮助在这里表示赞赏!我确定我错过了一些非常基本的东西。
我遇到的问题是我试图在演示 Web 应用程序中获取上下文之外的值,并且收到错误消息:
2021/04/11 11:35:54 http: panic serving [::1]:60769: interface conversion: interface {} is nil, not []string
在我的主要功能中,我使用以下内容设置上下文:
package main
type ctxKey struct{}
func someHttpHandleFunc() {
// .....
ctx := context.WithValue(r.Context, ctxKey{}, matches[1:])
route.handle(w, r.WithContext(ctx))
}
然后在我的处理程序中,我有以下内容:
package some_package
type ctxKey struct{}
func getField(r *http.Request, index int) string {
fields := r.Context().Value(ctxKey{}).([]string)
return fields[index]
}
我知道我遗漏了一些简单的东西,因为如果我尝试上面的代码并将我的getField()
函数放在package main
一切正常的范围内。
作为参考,这是一个学习练习,我正在尝试自学 Go 路由。我确实知道有可用的路由包 - 但我的目标是学习。我正在尽力遵循Go 中 HTTP 路由的不同方法。我还通读了上下文值的陷阱以及如何在 Go 中避免或减轻它们。后者似乎直接解决了我遇到的问题,但我似乎无法根据现有的情况弄清楚如何解决它。