确保一个类只有一个实例,并提供全局访问点。
需要确保系统中某个对象只有一个实例,如数据库连接池、配置管理器。
使用 sync.Once 保证初始化只执行一次,配合包级变量实现。
1package ethclient2 3import (4 "sync"5 "github.com/ethereum/go-ethereum/ethclient"6)7 8var (9 instance *ethclient.Client10 once sync.Once11)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 = client20 })21 return instance22}以太坊 RPC 客户端连接池,避免重复建立连接。