我已经做了很多关于背景的研究,但我似乎找不到一个普遍接受的答案,而且我是Go岁的新手.

在我目前的代码中,我有var ctx = context.Background()个,在不同的地方使用.

我担心的是,我的所有代码不是都在修改同一个上下文,因为它是一个全局变量吗.

是的,我知道上下文是request scoped.

这是我的上下文代码的一部分.

var ctx = context.Background()

var db *firestore.Client

var auth *aut.Client

func init() {
    app, err := firebase.NewApp(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    db, err = app.Firestore(ctx)
    if err != nil {
        log.Fatal(err)
    }
    auth, err = app.Auth(ctx)
    if err != nil {
        log.Fatal(err)
    }
}

func SetRate(r int) (err error) {
    //TODO: create last updated field
    _, err = db.Collection("Rate").Doc("rate").Set(ctx, map[string]int{"USDT": r})
    if err != nil {
        log.Println(err)
        return err
    }
    return nil
}

请尽量不要用过于复杂的词来描述一个术语.

推荐答案

将上下文从一个函数传递到另一个函数是go年来公认的做法.通常,每个函数的第一个参数都是context类型.我已经看到,每当一个上下文被传递下来,并且在方法范围内有一些用例时,就会从父上下文创建一个新的上下文.

Go相关问答推荐

Golang ==错误:OCI运行时创建失败:无法启动容器进程:exec:./" bin:stat./" bin:没有这样的文件或目录:未知

Gorm foreign 密钥

Golang测试容器,无法使网络正常工作

使用一元或服务器流将切片从GRPC服务器返回到客户端

在整个SQL事务中将使用上下文作为默认设置吗?

如何使用 go 读取 RDF xml 文件中的 XML 命名空间属性

如何将Golang测试用例的测试覆盖率值与特定阈值进行比较

Golang - POST 失败(NoSurf CSRF)

有没有办法计算枚举中定义的项目总数?

是否可以从 golang 中的参数推断类型?

如何在时间范围内规范化数组的元素?

为超时的单元测试创​​建 deadlineExceededError:true

在 Golang 中,如何将接口作为泛型类型与 nil 进行比较?

为什么此代码在运行命令 error="exec: not started" 时出现错误?

在删除级联时无法在 Gorm 中按预期工作

显示作为服务帐户身份验证的谷歌日历事件 - Golang App

K8s 算子读取原始数据

从另一个没有重复的确定性 int

如何将实际上是类型为 reflect.Int32 的类型切片的 interface{} 转换为 int32 的切片?

关于GO的几个问题