Учитывая пакет, содержащий следующую локальную переменную и функции:Передача переменных в Golang Пакет
var bucket *gocb.Bucket
func Init(b *gocb.Bucket) {
bucket = b
}
func DoSomething() {
// do something with 'bucket'
}
Приемлемо для вызова функции Init
, передавая экземпляр bucket
, перед вызовом DoSomething
, который зависит на переменной bucket
?
Или, если DoSomething
вместо явно принимает параметр bucket
следующим образом:
func DoSomething(bucket *gocb.Bucket) {
// do something with 'bucket'
}
Я бы предпочел, чтобы создать экземпляр одного экземпляра bucket
на уровне пакета, и использовать его на протяжении всего приложения жизненного цикла , в отличие от управления на уровне функции. Является ли это приемлемым с точки зрения дизайна, производительности и т. Д., Перспективы или есть ли предпочтительное средство достижения этого? Принимая во внимание, что bucket
нужно создавать только один раз.
DoSomething
будет вызываться из контекста HTTP; Я бы предпочел, чтобы обработчики HTTP не имели видимости в параметре bucket
, а вместо этого создавали экземпляр bucket
при запуске приложения.