Golang Go语言中的指针和单例模式疑问

Golang Go语言中的指针和单例模式疑问

我看一般的开源库里一般都是返回的是指针,New(){return &结构体{}},例如:logrus

1,我想问下,啥时候用指针啥时候用单例模式?

2,以 logrus 为例,当我要用到 logrus 的时候,方式一:我是在每个包里都使用 变量=logrus.New(),方式二:还是在一个自定义 log 包里用一个全局变量=logrus.New(),然后其他包要用日志的时候都去导入这个自定义 log 包里的全局变量? 方式一(内存浪费?)和方式二有啥优缺点?


更多关于Golang Go语言中的指针和单例模式疑问的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

一般都是 new 一个实例。

当你确信,你用的东西在你的整个程序中配置都相同的情况下,可以用方式二啊。

甚至 logrus 帮你把方式二都做好了……不用你自己再写一个。

更多关于Golang Go语言中的指针和单例模式疑问的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang(Go语言)中,指针和单例模式是两个相对独立但又有所关联的概念。

首先,关于指针,它是Go语言中的一种基本数据类型,用于存储变量的内存地址。使用指针可以直接访问和修改存储在该地址上的值,这在某些场景下(如需要传递大型数据结构或需要直接修改函数外部变量时)非常有用。指针的使用需要谨慎,以避免出现空指针解引用、野指针等安全问题。

而单例模式是一种设计模式,用于确保一个类仅有一个实例,并提供一个全局访问点。在Go语言中,实现单例模式通常依赖于包级变量和sync.Once类型来确保线程安全地初始化单例对象。sync.OnceDo方法会确保传入的函数只被调用一次,从而实现单例的懒加载和线程安全。

在Go语言中实现单例模式时,可能会用到指针,因为单例对象通常需要在多个地方被共享和修改。但指针并不是实现单例模式的必要条件,关键在于确保全局只有一个实例,并提供全局访问点。

总结来说,指针和单例模式在Go语言中都有各自的应用场景。指针用于直接访问和修改内存地址上的值,而单例模式则用于确保类的唯一实例。在实现单例模式时,可以考虑使用指针来共享和修改单例对象,但这不是必须的。重要的是理解两者的概念和用途,并在合适的场景下正确使用它们。

回到顶部