如何使用go编程语言实现Singleton设计模式?
撇开是否实现单例模式的观点不谈,以下是一个可能的实现:
package singleton
type single struct {
O interface{};
}
var instantiated *single = nil
func New() *single {
if instantiated == nil {
instantiated = new(single);
}
return instantiated;
}
single
并且instantiated
是私人的,但是New()
公开的。因此,你不能直接实例single
没有经历New()
,和它跟踪实例的数量与私人布尔instantiated
。调整single
口味的定义。
但是,正如其他几个人指出的那样,这不是线程安全的,除非您仅在中初始化单例init()
。更好的方法是利用sync.Once
您的辛勤工作:
package singleton
import "sync"
type single struct {
O interface{};
}
var instantiated *single
var once sync.Once
func New() *single {
once.Do(func() {
instantiated = &single{}
})
return instantiated
}
另请参见,hasan j的建议只是将包 视为 单例。最后,请考虑其他人的建议:单例通常是存在问题的指示。
问题内容: 我需要测试一些遗留代码,该遗留代码在方法调用中使用单例。该测试的目的是确保clas sunder测试调用单例方法。我在SO上也看到过类似的问题,但是所有答案都需要其他依赖项(不同的测试框架)-不幸的是,我仅限于使用Mockito和JUnit,但这在如此流行的框架下应该是完全可能的。 单例: 被测课程: 单元测试: 这个想法是配置可怕的单例的预期行为,因为被测类将调用它的getInsta
Singleton的目的是控制对象创建,将对象数量限制为只有一个。 由于只有一个Singleton实例,Singleton的任何实例字段每个类只会出现一次,就像静态字段一样。 单身人士通常控制对资源的访问,例如数据库连接或套接字。 例如,如果您的数据库只有一个连接的许可证,或者您的JDBC驱动程序遇到多线程问题,则Singleton会确保只建立一个连接,或者一次只能有一个线程访问该连接。 实施单身
问题内容: 我对Guice以及它的单例是否服从线程限制(我可以尝试设置)感到担忧: 如您所见,每次我们创建的新实例时,都会使用a来引导其下的整个依赖关系树。 如果从多个线程内部调用会怎样? 例如:线程1 通过其no-arg构造函数创建了一个新线程,而线程2执行了相同的操作。 Guice将为每个线程的实例提供相同的确切实例,还是Guice将为每个线程提供2个不同的实例?尽管应该返回相同的单例实例,但
我需要测试一些遗留代码,这些代码在a方法调用中使用了单例。测试的目的是确保类sunder测试对singletons方法进行调用。我在SO上看到过类似的问题,但所有的答案都需要其他依赖项(不同的测试框架)--不幸的是,我仅限于使用Mockito和JUnit,但对于这样流行的框架,这应该是完全可能的。 单身人士: 正在测试的类: 单元测试: 这个想法是配置可怕的单例的预期行为,因为被测试的类将调用它的
当你从药房得到处方时,有一个与药物相关的起始日期。药物也有一个预定的频率,告诉你什么时候服用剂量。频率有相当常见的模式。你可以每4小时服用一次。你可以每天服用一次。你可以在吃饭的时候吃,也可以在睡前吃。您也可以采取他们的PRN或“根据需要。”许多药物也会停药。你可能需要服药7天。你可能需要服用一定数量的剂量。你也可以在你的余生里服药。假设您必须实施一个系统来告诉护士病人何时应该接受药物治疗。您将如
个人身份验证 (PIV) Yubikey 支持个人身份验证 (PIV 和 FIPS 201) 智能卡接口 (NIST SP 800-73)。根据智能卡上存储的私钥,通过 PKCS#11 一类的通用接口进行RSA 或者 ESS 的签名、加密、解密操作。