【发布时间】:2021-10-13 23:13:29
【问题描述】:
我有一个在应用程序启动时实例化的包级变量。即使它被声明为包级别,我也需要从包外部访问它。为此,我有一个返回变量的函数。
package app
var myService MyService
type MyService interface {
DoThis()
DoThat()
}
func Initialize() {
// initialise other stuff
myService = initMyService()
}
func GetMyService() MyService {
return myService
}
现在,在应用程序包之外,当我需要使用 MyService 执行某些操作时,我会执行以下操作。
ms := app.GetMyService()
ms.DoThis()
我有以下问题。
- GetMyService() 函数不是在每次调用时都返回 myService 的副本吗?
- 如果是这种情况,如果我在该函数中返回指向 myService 的指针,它是否通过返回对最初实例化的单个 myService 实例的引用来解决该问题?
【问题讨论】:
-
无论哪种方式,
GetMyService都会返回一个将具体值装箱的接口。所以对于客户端代码,它是透明的 -
但以防万一 - 是的,它对堆栈具有应对价值。
-
@blackgreen 是的,它封装了实际的实现。但它不是每次调用时都将 myService 的副本装箱吗?
-
Go 中没有引用。
-
@Volker 我的意思是指针