在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
}
|
输出结果:
本文转自 ponpon_ 51CTO博客,原文链接:http://blog.51cto.com/liuxp0827/1354360,如需转载请自行联系原作者