【发布时间】:2015-06-11 19:01:53
【问题描述】:
给定一个包含以下局部变量和函数的包:
var bucket *gocb.Bucket
func Init(b *gocb.Bucket) {
bucket = b
}
func DoSomething() {
// do something with 'bucket'
}
是否可以在调用DoSomething 之前调用Init 函数,传入bucket 的实例,这取决于bucket 变量?
或者,应该DoSomething 明确接受bucket 参数,如下所示:
func DoSomething(bucket *gocb.Bucket) {
// do something with 'bucket'
}
我更愿意在包级别实例化bucket 的单个实例,并在整个应用程序生命周期中使用它,而不是在函数级别进行管理。从设计、性能等角度来看,这是否可以接受,或者是否有实现此目的的首选方法?请记住,bucket 只需实例化一次。
DoSomething 将从 HTTP 上下文中调用;我希望 HTTP 处理程序对 bucket 参数不可见,而是在应用程序启动时实例化 bucket。
【问题讨论】: