MST

星途 面试题库

面试题:Go函数设计模式之单例模式实现

请用Go语言实现一个单例模式的函数。要求考虑并发安全,简述你所采用的实现方式背后的设计思路。
46.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

Go语言实现单例模式并考虑并发安全

package main

import "sync"

// Singleton结构体定义单例实例
type Singleton struct {
    // 这里可以定义单例需要的属性
}

// 定义一个全局变量来保存单例实例
var instance *Singleton
var once sync.Once

// GetInstance函数用于获取单例实例
func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}

设计思路

  1. 使用sync.Once: sync.Once类型的变量once确保Do方法中的代码只被执行一次。无论有多少个并发的GetInstance调用,instance只会被初始化一次。
  2. 延迟初始化:在第一次调用GetInstance函数时,once.Do会执行初始化instance的操作,实现了延迟初始化,避免了程序启动时不必要的初始化开销。
  3. 线程安全sync.Once内部实现了线程安全机制,保证在并发环境下,单例的初始化操作不会出现竞态条件,从而确保单例模式在并发场景下的正确性。