英文:
App Engine go context.Context has no namespace
问题
从ctx, ctxErr := appengine.Namespace(ctx, "MyContext")
获取上下文后,我期望ctx
的命名空间被设置为MyContext
。
代码
import (
...
"golang.org/x/net/context"
"google.golang.org/appengine"
)
ctx := appengine.NewContext(r)
ctx, ctxErr := appengine.Namespace(ctx, "MyContext")
if ctxErr != nil {
log.Errorf(ctx, "Failed to obtain custom namespace context, error:%s", ctxErr.Error())
//如果一切都失败了,则使用默认命名空间
ctx = appengine.NewContext(r)
}
然而,事实并非如此,这导致所有具有命名空间意识的 API 使用默认命名空间。
ctx 的输出如下所示(请参见黄色边框的输出):
示例应用程序
将projectID := ""
替换为您的项目ID,确保在开发环境中进行了身份验证,并运行go run /example/app/main.go
。
英文:
After obtain a context from ctx, ctxErr := appengine.Namespace(ctx, "MyContext")
I would expect ctx
namespace to be populated with MyContext
Code
import (
...
"golang.org/x/net/context"
"google.golang.org/appengine"
)
ctx := appengine.NewContext(r)
ctx, ctxErr := appengine.Namespace(ctx, "MyContext")
if ctxErr != nil {
log.Errorf(ctx, "Failed to obtain custom namespace context, error:%s", ctxErr.Error())
//use default if all else fails
ctx = appengine.NewContext(r)
}
However this is not the case, thus causing all namespace aware API to use default namespace.
Dump of ctx produces the following (see yellow bordered output)
Example App
Populate projectID := ""
with your project id, ensure you have performed authentication on your development environment and run go run /example/app/main.go
答案1
得分: 2
混合使用Google API Go库导致了问题。
简短答案
Google Cloud API库有两种不同的版本,问题是由于混合使用了下面两个库的功能而引起的。
google-cloud-go 推荐使用
英文:
Mixing of google api go libs, was causing the problem.
Short Answer
Google Cloud API libs come in two different flavors, issues was caused by mixing of lib features from libs below.
google-cloud-go Recommanded
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论