Easy-Go-Web3
知识图谱Go 教程React Web3智能合约
需求分析系统设计设计模式Go 微服务
项目实战DevOps
Go 生态React 生态智能合约生态Web3 生态AI × Web3工具箱Web3 公司远程Web3求职
🎯 AA 工程师面试手册博客
GitHub
返回设计模式
创建型

单例模式

确保一个类只有一个实例,并提供全局访问点。

问题场景

需要确保系统中某个对象只有一个实例,如数据库连接池、配置管理器。

解决方案

使用 sync.Once 保证初始化只执行一次,配合包级变量实现。

Go 实现

singleton.go
go
1package ethclient
2
3import (
4 "sync"
5 "github.com/ethereum/go-ethereum/ethclient"
6)
7
8var (
9 instance *ethclient.Client
10 once sync.Once
11)
12
13func GetClient() *ethclient.Client {
14 once.Do(func() {
15 client, err := ethclient.Dial("https://mainnet.infura.io/v3/YOUR_KEY")
16 if err != nil {
17 panic(err)
18 }
19 instance = client
20 })
21 return instance
22}

Web3 应用场景

以太坊 RPC 客户端连接池,避免重复建立连接。

优点

  • +节省资源
  • +全局访问
  • +延迟初始化

缺点

  • -全局状态难以测试
  • -隐藏依赖关系
工厂模式
Easy-Go-Web3

构建 Go 后端与 Web3 的学习之路。从基础到进阶,从理论到实践,助你成为全栈区块链开发者。

学习路径

  • 知识图谱
  • Go 教程
  • Go 微服务
  • 面试手册

资源中心

  • 工具箱
  • DevOps 工具
  • Web3 生态
  • 博客

© 2025 Easy-Go-Web3. All rights reserved.

Created withbyhardybao