使用Go Runtime Google App Engine时出现Google云端存储客户端应用错误

时间:2015-03-12 13:10:03

标签: google-app-engine go google-cloud-storage google-cloud-platform

我正在尝试this link中的示例代码,并尝试对其进行操作 谷歌云存储使用来自Go运行时的谷歌云存储客户端应用程序,但示例代码中的以下部分给出错误 &#34;不能使用c(类型&#34; appengine&#34; .Context )作为类型context.Context in function argument: &#34; appengine&#34; .Context不实现context.Context(缺少截止日期方法)&#34; < / EM>

c := appengine.NewContext(r)
hc := &http.Client{
    Transport: &oauth2.Transport{
        Source: google.AppEngineTokenSource(c, storage.ScopeFullControl),
        Base:   &urlfetch.Transport{Context: c},
    },
}

这里的问题是什么?我怎么解决这个问题?

2 个答案:

答案 0 :(得分:5)

错误消息明确指出您尝试传递appengine.Context类型的值,其中预期类型为context.Context

google.AppEngineTokenSource()函数需要类型为context.Context的值,而不是您传递的值(类型为appengine.Context)。

您可以使用以下函数创建此类Context

cloud.NewContext(projID string, c *http.Client)

我就是这样做的:

c := appengine.NewContext(r)
hc := &http.Client{}
ctx := cloud.NewContext(appengine.AppID(c), hc)
hc.Transport = &oauth2.Transport{
    Source: google.AppEngineTokenSource(ctx, storage.ScopeFullControl),
    Base:   &urlfetch.Transport{Context: c},
}

答案 1 :(得分:2)

您需要按照appengine更新google.golang.org/appengine#undef UNICODE #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <WinSock2.h> #include <WS2tcpip.h> #include <iostream> #include <string> #include <thread> #pragma comment (lib, "Ws2_32.lib") #define DEFAULT_BUFLEN 512 #define DEFAULT_PORT "1016" //Globals struct addrinfo *result = NULL; struct addrinfo hints; //Prototypes int listenFunction(); int acceptFunction(SOCKET ListenSocket); https://github.com/golang/oauth2/#app-engine