Golang 单例模式 singleton pattern

简介:

在Java中,单例模式的实现主要依靠类中的静态字段。在Go语言中,没有静态类成员,所以我们使用的包访问机制和函数来提供类似的功能。来看下下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package  singleton
                                                  
import  (
     "fmt"
)
                                                  
type Singleton  interface  {
     SaySomething()
}
                                                  
type singleton struct {
     text string
}
                                                  
var oneSingleton Singleton
                                                  
func NewSingleton(text string) Singleton {
     if  oneSingleton == nil {
         oneSingleton = &singleton{
             text: text,
         }
     }
     return  oneSingleton
}
                                                  
func ( this  *singleton) SaySomething() {
     fmt.Println( this .text)
}

   来测试下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package  main
                          
import  (
     "Singleton/singleton"
)
                          
func main() {
     mSingleton, nSingleton := singleton.NewSingleton( "hello" ), singleton.NewSingleton( "hi" )
     mSingleton.SaySomething()
     nSingleton.SaySomething()
}
     
     
//----------------------- goroutine 测试 ------------------------
func main() {
     c := make(chan  int )
     go newObject( "hello" , c)
     go newObject( "hi" , c)
     
     <-c
     <-c
}
     
func newObject(str string, c chan  int ) {
     nSingleton := singleton.NewSingleton(str)
     nSingleton.SaySomething()
     c <-  1
}

输出结果:

wKiom1Lh2xjCyOqKAAAyezjigLU260.jpg










本文转自 ponpon_ 51CTO博客,原文链接:http://blog.51cto.com/liuxp0827/1354360,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
安全 测试技术 Go
|
3月前
|
设计模式 Java Go
什么是Go 中的单例模式?
本文介绍了Go语言中的单例设计模式,包括饿汉式与懒汉式两种实现方式。饿汉式单例在程序启动时即完成实例化,适用于不需延迟加载的情况;通过全局变量初始化确保实例唯一性。懒汉式单例采用延迟初始化策略,在首次请求时创建实例,适合资源消耗较大的场景;利用双重检查锁定机制保证多线程环境下的安全性。两种模式各有优劣,开发者应根据实际需求选择合适的实现方案。
|
4月前
|
设计模式 安全 Java
聊聊 Go 中的单例模式
**摘要:** 单例模式确保类只有一个实例,提供全局访问点。Go中实现单例有饿汉式和懒汉式。饿汉式在程序启动时创建实例,如: ```go var Instance = new(singleton) ``` 懒汉式首次需要时创建,使用双重检查锁定模式确保线程安全: ```go if instance == nil { mutex.Lock() if instance == nil { instance = new(singleton) } mutex.Unlock() } ``` 饿汉式简单但可能浪费资源,懒汉式延迟初始化但需处理并发。
53 0
|
5月前
|
Go
go之单例模式
go之单例模式
|
6月前
|
设计模式 安全 测试技术
[设计模式 Go实现] 创建型~单例模式
[设计模式 Go实现] 创建型~单例模式
|
6月前
|
Java Go C++
Golang每日一练(leetDay0099) 单词规律I\II Word Pattern
Golang每日一练(leetDay0099) 单词规律I\II Word Pattern
48 0
Golang每日一练(leetDay0099) 单词规律I\II Word Pattern
|
6月前
|
设计模式 Go 开发工具
Golang设计模式——19单例模式
Golang设计模式——19单例模式
48 0
|
设计模式 存储 缓存
Go 语言实现创建型设计模式 - 单例模式
Go 语言实现创建型设计模式 - 单例模式
70 1
|
设计模式 安全 Java
深入剖析Golang中单例模式
深入剖析Golang中单例模式
107 0
|
设计模式 Java Go
Go实现设计模式之单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式常用于需要共享资源或控制资源访问的场景,例如数据库连接池、线程池等。
280 0