Beego - 我需要 "context.Context" 而不是 Beego 上下文

Beego - I need "context.Context" and not the Beego context

我正在尝试编写一个函数来验证 Google id 令牌。

oauth2 package要求我在创建新服务时传入上下文,像这样:

package services

import (
    "context"
    "google.golang.org/api/oauth2/v2"
)

func ValidateToken(ctx *context.Context, idToken string) {
    // I need to pass context.Context in to the oauth2 library
    oauth2Service, err := oauth2.NewService(*ctx)
    tokenInfoCall := oauth2Service.Tokeninfo()
    tokenInfoCall.IdToken(idToken)
    tokenInfo, err := tokenInfoCall.Do()

在Beego中this.Ctx是Beego上下文模块的一个实例,所以这段代码不会编译:

func (c *TokenController) Post(ctx *context.Context) {
    requestParams := struct {
        Google_id_token string
    }{}
    err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestParams)
    // Type mismatch
    services.ValidateToken(c.Ctx, requestParams.Google_id_token)

如何获取需要传递给 OAuth2 库的上下文?

编辑:我正在通过传入 context.Background() 来解决它,但我不确定我是否完全理解它的副作用。我是 Golang 的新手,感觉背景上下文应该只用于“更高”级别?

func ValidateToken(idToken string) {
    ctx := context.Background()
    oauth2Service, err := oauth2.NewService(ctx)

试试这个:c.Ctx.Request.Context()

也不要在函数 ValidateToken 的 arg ctx 中使用指针,因为 stdlib 中的 context.Context 是接口