我正在使用Go BigQuery客户端软件包,但对context
的使用情况有些困惑。
在文档中,只有Put
函数明确提及使用带有超时的新上下文以避免不确定的重试。将context.Background()
用于所有其他呼叫是否安全?
来自golang site:
包上下文定义了上下文类型,其中包含截止日期,API中的取消信号和其他请求范围的值界限和过程之间。
然后,上下文被设计为针对每个用例进行调整和定制。您可以使用该库提供的功能来实现。
WithCancel,WithDeadline和WithTimeout函数采用上下文(父级)并返回派生的Context(子级)和一个取消功能。调用CancelFunc会取消该子代及其子代,删除父母对孩子的引用,并停止任何关联计时器
因此,goDocs建议在上下文中使用WithTimeout函数,同时将数据插入BigQuery并防止重复,如您所见。
唯一的条件是传递非null的上下文。通常,您会使用context.Background()
作为一种方式(正如我在Cloud Github共享的snippets.go中看到的那样),但是如果不确定要使用哪个,则可以安全地通过context.TODO
。