Go 中的单例

2023-12-27

如何在Go语言中实现单例设计模式?


抛开实现单例模式是否是个好主意的争论,下面是一个可能的实现:

package singleton

type single struct {
        O interface{};
}

var instantiated *single = nil

func New() *single {
        if instantiated == nil {
                instantiated = new(single);
        }
        return instantiated;
}

single and instantiated是私人的,但是New()是公开的。因此,您不能直接实例化single不经过New(),并且它使用私有布尔值跟踪实例化的数量instantiated。调整定义single去尝尝。

然而,正如其他几位人士所言noted http://marcio.io/2015/07/singleton-pattern-in-go/,这不是线程安全的,除非您只是在中初始化您的单例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 关于仅考虑包的建议as单身人士。最后,请考虑其他人的建议:单例通常是有问题的实现的指标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go 中的单例 的相关文章

  • 使用cgo时的多重定义

    package main int add int a int b return a b import C import fmt func main func Test1 fmt Println C add 1 3 export Test2
  • Golang 优雅地关闭 HTTP 服务器并进行错误处理

    我正在让我的 HTTP 服务器正常关闭 我从帖子中获取了提示here https stackoverflow com questions 39320025 how to stop http listenandserve 并且到目前为止已经像
  • 在 C++ 中创建观察者设计模式的好方法

    我正在尝试用 C 实现观察者设计模式 如下所示 include
  • exec git 命令拒绝重定向到 Go 中的文件

    我试图从 go 调用 git log 并将输出重定向到给定文件 cmdArgs string log numstat reverse fmt Sprintf s HEAD 89c98f5ec48c8ac383ea9e27d792c3dc77
  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 是否可以获取有关 Golang 中调用者函数的信息?

    是否可以获取有关 Golang 中调用者函数的信息 例如 如果我有 func foo Do something func main foo 我怎样才能得到那个foo已被呼叫来自main 我可以用其他语言实现这一点 例如在 C 中我只需要使用
  • MVVM ViewModel 与 MVC ViewModel

    ViewModel 是一个在 MVVM Model View ViewModel 和 ASP NET MVC 的推荐实现中使用的术语 鉴于每种模式都使用相同的术语 研究 ViewModel 可能会令人困惑 MVC ViewModel 和 M
  • 如何简化 ASP.NET MVC 中的全状态交错模式对话框

    我需要在多对多模式对话框中保留状态渐进增强 http en wikipedia org wiki Progressive enhancementASP NET MVC 项目中的方式 在我的代码中 当禁用 javascript 时 模式对话框
  • GOPATH值设置

    我用go1 3 1 windows amd64 msi安装go 安装后GOROOT是默认设置 我发现 D Programs Go bin 在 PATH 中 然后我创建一个 GOPATH 环境变量 使用 go get 命令时 出现错误 软件包
  • 发布者-订阅者与观察者[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java API 中单例类的示例

    Java API 中单例设计模式的最佳示例有哪些 是个Runtime类单例 我只想到两个例子 java lang Runtime getRuntime http java sun com javase 6 docs api java lan
  • 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

    我有一个应用程序 我正在创建多个 goroutine 来同时执行某个任务 所有工作协程都会等待条件 事件发生 一旦事件被触发 它们就会开始执行 创建完所有goroutines后 主线程在发送广播信号之前应该知道所有goroutines确实处
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • MVC和依赖注入,被迫使用单例Controller?

    我正在致力于构建一个根据 MVC 原则运行并利用依赖注入的 PHP 框架 我想我已经把前端控制器部分放下了 有一个工作路由器实例化控制器实例并根据请求的 URI 调用适当的操作 接下来是依赖注入 我想实现一个使用反射解决依赖关系的容器 这样
  • 如何在 Go 中将环境变量传递给测试用例

    在为 Go 编写测试用例时 传递需要提供给测试的环境变量的标准方法是什么 例如 我们不想在测试用例的源代码中嵌入密码 处理这个问题最标准的方法是什么 我们让测试用例寻找配置文件吗 还有别的事吗 看来我偶然发现了答案 将其添加到测试用例中可以
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req
  • IoC 服务的抽象类还是接口?

    我目前正在使用 IoC 在项目中提供存储库的具体实现 我读过的所有示例都使用接口作为服务的定义 但是 在阅读了 Microsoft 的建议后 建议更喜欢抽象类而不是接口 http msdn microsoft com en us libra
  • java异常处理策略[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 未找到架构 x86_64 os x lion 的符号

    当尝试使用 opencv 2 3 1 作为第三个来编译简单的 c test cpp 代码时 库 我收到以下错误消息 体系结构 x86 64 的未定义符号 cvLoadImage referenced from 这看起来像您没有正确链接到库
  • 尽管存在导入包,但 org.osgi.framework.BundleActivator 仍出现 ClassNotFoundException

    我尝试在较长一段时间后再次使用激活器运行一个非常简单的 OSGi Hello World 风格的示例 并得到 org osgi framework BundleActivator 的 ClassNotFoundException 请参阅下面
  • 逗号分隔的数组项列表

    VB NET 中是否有内置函数可以接受字符串数组并输出以逗号分隔的项目字符串 例子 function Sam Jane Bobby gt Sam Jane Bobby String Join YourArray 此外 如果您想从复选框列表
  • 参考模型编写两次迁移

    我有一个消息模型 Message 该模型作为 userTo 和 userFrom 因此有两个对 User 的引用 我该如何编写迁移 我的用户模型是User 谢谢 这是这个问题的完整答案 以防访问这个问题的人很难将所有内容放在一起 就像我第一
  • Java 静态字段初始化

    我刚刚花了半个小时弄清楚这件事 我已经设法修复了我的代码 但我不完全理解发生了什么 想知道是否有人可以阐明它 我有一个utils类型类 包含一些静态字段 例如数据库连接端点 其他程序根据手头的任务使用这些静态字段 本质上是一个图书馆 这是它
  • socket.io 私信

    我一直在网上搜索但没有运气 我正在尝试弄清楚如何将私人消息从一个用户发送到另一个用户 有很多片段 但我不确定客户端 服务器交互 如果我有要发送到的套接字的 ID 如何将其发送到服务器 以及如何确保服务器仅将消息发送到该接收者套接字 有没有人
  • ServletContextListener 不在部署时执行

    我正在尝试在部署我的战争文件时初始化流对象 我编写了一个实现 ServletContextListener 的初始化程序类 并将侦听器类标记添加到我的 web xml 中 问题是 当我向应用程序发出第一个请求时 而不是在部署应用程序时 会发
  • android:安装错误:未知失败 - 运行 apk 文件时

    昨天我在使用模拟器时没有遇到任何错误 但今天我遇到了这个错误 请检查下图 我已经运行和调试了很多次 但每次都没有得到相同的错误 安装apk文件后出现错误 请给出正确的答案 以便我可以正确修复模拟器并进行处理 现在 当我编译时 出现新错误 请
  • 用于选择性剥离 HTML 的正则表达式

    我正在尝试使用 PHP 解析一些 HTML 作为练习 将其仅作为文本输出 但我遇到了障碍 我想删除隐藏的所有标签style display none 请记住 标签可能包含其他属性和样式属性 到目前为止我的代码是这样的 page preg r
  • Windows 过滤平台 - 如何根据本地端口阻止传入连接?

    我正在尝试使用 WFP 设置一些过滤器来阻止到本地服务器的入站连接 例如 侦听端口 8080 的网络服务器 我有一个可以基于远程端口进行阻止的过滤器 因此我可以阻止我的计算机上的进程建立与端口 8080 的任何连接 但我不知道如何基于本地端
  • 您的捆绑包已锁定为 mimemagic (0.3.5),但在您的 Gemfile 中列出的任何源中都找不到该版本 [重复]

    这个问题在这里已经有答案了 今天我尝试为我的 Rails 6 1 0 构建一个带有主动存储的 docker 我收到以下错误 Your bundle is locked to mimemagic 0 3 5 but that version
  • 将 git 存储库上移一级

    Git初学者问题 我有一个小型私人网络项目 使用 msysgit 在本地进行版本控制 没有外部存储库 因为它只适合我 所以我基本上可以做任何我想做的事情 我已将其设置在项目目录中 即 webroot 中 现在必须创建第二个目录 与 webr
  • 在 Powershell 中访问音乐文件元数据[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 因此 多年来 从一台电脑 硬盘复制到另一台电脑 硬盘之间 我的音乐收藏有点混乱 所以我想以编程方式浏览每一个并更新下面屏幕截图中的文件元数据
  • 如何强制 Google Docs 从 Chrome 扩展中渲染 HTML 而不是 Canvas?

    Google 文档更新为基于画布的渲染而不是 HTML 渲染后 是否可以强制 Google 文档从 chrome 扩展而不是画布渲染 HTML 不知何故 像 Grammarly 这样的 chrome 扩展可以做到这一点 但我不完全确定如何做
  • Objective-C 和 Android [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我刚刚完成了一个相对较大的 Android 项目 它在我嘴里留下了一种苦涩的味道 因为我知道它永远不会在太阳系这一边最普遍的手机之一上运行 那个
  • Blazor recaptcha 验证属性 IHttpContextAccessor 始终为 null

    我想尝试一下使用 Blazor 服务器端 到目前为止 我已经设法以某种方式克服了大多数令人头疼的问题 并且很享受它 直到现在 我正在尝试为 Google Recaptcha v3 编写一个验证器 它需要用户的 IP 地址 通常我会通过以下方
  • C# Sql 连接驱动程序

    SQL 连接对象连接到 SQL Server 以运行查询的驱动程序是什么 如果我有以下代码 SQLConnection cn new SqlConnection server ServerName initial catalog Corpo
  • MVC5 EF 实体显然正在保存,但检索时为空

    我有一个Account包含列表的类Payments 其中包含一个列表Products那是Pending Sold or Refunded 当选择Products要付款 我可以将它们添加到Payment对象 然后将整个对象保存到Account
  • 如何在不刷新页面的情况下自动提交此表单?

    这一切都在一个 php 文件中
  • Go 中的单例

    如何在Go语言中实现单例设计模式 抛开实现单例模式是否是个好主意的争论 下面是一个可能的实现 package singleton type single struct O interface var instantiated single