gpt4 book ai didi

go - 将变量传递给 Golang 包

转载 作者:IT王子 更新时间:2023-10-29 01:33:33 26 4
gpt4 key购买 nike

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

var bucket *gocb.Bucket

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

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

在调用依赖于 bucket 变量?

或者,应该 DoSomething 而不是显式接受 bucket 参数,如下所示:

func DoSomething(bucket *gocb.Bucket) {
// do something with 'bucket'
}

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

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

最佳答案

在 Go 中,如果你的包依赖导入的东西。因此,除非出于某种原因不可能,否则您应该导入实例化 bucket 的包。然后从那里获取它,直接分配它或在你的包裹的 init 中功能。

import "my/other/pkg"

var bucket = pkg.InitBucket()

但是,如果无法确定将提供什么包 bucket ,那么你的路就是Go的路。例如,考虑 database/sql SQL 驱动程序必须先注册才能使用。

一般来说,IoC如果那是您的想法,则不适用于 Go 包。

关于go - 将变量传递给 Golang 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com