首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量传递给Golang包

将变量传递给Golang包
EN

Stack Overflow用户
提问于 2015-06-11 10:34:25
回答 1查看 3.8K关注 0票数 2

给定包含以下局部变量和函数的包:

代码语言:javascript
复制
var bucket *gocb.Bucket

func Init(b *gocb.Bucket) {
    bucket = b
}

func DoSomething() {
    // do something with 'bucket'
}

在调用依赖于Init变量的DoSomething之前,调用bucket的一个实例调用bucket函数可以接受吗?

或者,如果DoSomething显式地接受bucket参数,如下所示:

代码语言:javascript
复制
func DoSomething(bucket *gocb.Bucket) {
    // do something with 'bucket'
}

我更愿意在包级别实例化bucket的单个实例,并在整个应用程序生命周期中使用它,而不是在函数级别进行管理。从设计、性能等角度来看,这是可以接受的,还是有一种更好的方法来实现这一点?请记住,bucket只需要实例化一次。

DoSomething将从HTTP上下文中调用;我希望HTTP处理程序在bucket参数上不具有可见性,而是在应用程序启动时实例化bucket

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-11 11:01:53

在Go中,如果您的包依赖于外部的东西,则需要导入所述的东西。因此,除非出于某种原因不可能,否则您应该导入实例化bucket的包,并从中获取它,直接分配它或在包的init函数中。

代码语言:javascript
复制
import "my/other/pkg"

var bucket = pkg.InitBucket()

但是,如果不可能确定提供bucket的包,那么您的方式就是要走的路。例如,考虑database/sql,其中必须注册SQL驱动程序才能使用它们。

通常,如果您的想法是这样的话,IoC不适用于Go包。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30778425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档