传递上下文的最佳方式

我已经对上下文进行了大量研究,但似乎找不到普遍接受的答案,而且我是Go的新手。


在我当前的代码中var ctx = context.Background(),它被用于不同的地方。


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


是的,我知道上下文是请求范围的。


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


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

}

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


青春有我
浏览 126回答 2
2回答

holdtom

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

ibeautiful

最好的做法是在函数内部创建一个上下文,并根据需要在函数之间传递它,而不是让一个上下文在整个包中共享。对于 HTTP 服务器之类的东西,您通常会看到每个传入 API 调用的唯一上下文。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go