demo示例:

aplugin.go

  

  创建插件aplugin.so : 

go build -buildmode=plugin -o aplugin.so aplugin.go

test.go

  

前面的是使用懒汉模式的单例模式,并不是线程安全的,可以用golang的init()来模仿饿汉模式

test.go

  

  product.go

 以上代码是线程安全的,因为程序一开始就调用了product 包的init()来执行new。

要理解以上代码需要清楚golang main和init的调用顺序。

其他package的init() > main package包的main > main package包的init()