【设计模式】1、单例模式

文章目录

单例分为, 执行时机分为: 饿汉, 懒汉两种

  • 饿汉: 进程启动时执行, 优点是更容易暴露问题, 缺点是进程启动时会执行太多耗时操作
  • 懒汉: 使用时执行, 优点是把耗时操作分散到进程使用的过程中, 缺点是问题会被延迟暴露, 不易于定位问题

在 go 中可以通过 sync.Once 实现

package singleton

import "sync"

// 变量实例
var (
    once sync.Once
    cli  *client
)

// 类型, 构造函数
type client struct{}

func newClient() *client {
    return &client{}
}

// InitClient
// 1. 可在 package 的 init() 函数中, 被自动调用, 是饿汉
// 2. 也可在进程初始化时, 被手动调用, 是饿汉
// 3. 在使用时才调用, 是懒汉
func InitClient() *client {
    once.Do(func() {
       cli = newClient()
    })
    return cli
}

单测:

package singleton

import (
    "github.com/stretchr/testify/require"
    "testing"
)

func TestInitClient(t *testing.T) {
    cli1 := InitClient()
    cli2 := InitClient()
    require.Equalf(t, cli1, cli2, "单例, 构造的指针应相同")
}

func BenchmarkInitClient(b *testing.B) {
    b.RunParallel(func(pb *testing.PB) {
       for pb.Next() {
          cli1 := InitClient()
          cli2 := InitClient()
          require.Equalf(b, cli1, cli2, "单例, 构造的指针应相同")
       }
    })
}

执行:

go test .
go test -bench .

相关推荐

  1. 设计模式1

    2024-04-05 08:28:03       40 阅读
  2. 设计模式1模式

    2024-04-05 08:28:03       36 阅读
  3. 设计模式

    2024-04-05 08:28:03       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 08:28:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 08:28:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 08:28:03       82 阅读
  4. Python语言-面向对象

    2024-04-05 08:28:03       91 阅读

热门阅读

  1. ubuntu23 安装minio

    2024-04-05 08:28:03       29 阅读
  2. CSS简介

    CSS简介

    2024-04-05 08:28:03      23 阅读
  3. 理解数学概念——整函数(复平面可积函数)

    2024-04-05 08:28:03       59 阅读
  4. VSCode 插件 Todo Tree 待办事项

    2024-04-05 08:28:03       38 阅读
  5. notepad++主题One Dark

    2024-04-05 08:28:03       28 阅读
  6. uniapp-image-compress 图片压缩

    2024-04-05 08:28:03       36 阅读
  7. 谁先倒

    2024-04-05 08:28:03       25 阅读
  8. 数字时代的“三把利剑”:算力、运力、存力

    2024-04-05 08:28:03       29 阅读
  9. opencv-python库 cv2边界填充&resize图片

    2024-04-05 08:28:03       34 阅读
  10. 计算机视觉

    2024-04-05 08:28:03       34 阅读