Golang - Design Pattern #1: 單例模式 (Singleton)

閱讀時間約 3 分鐘

哈囉!繼續我們的Go設計模式之旅,今天我們要探討的是「單例模式」。可能你已經聽過它,也可能還沒。但不用擔心,我們會從基礎解釋開始!


簡介

什麼是單例模式 (Singleton)

單例模式是一種確保某個類只有一個實例,並提供一個全域的訪問點來獲取這個實例的設計模式。簡單來說,它確保了在整個應用中,某個特定的類別只被實例化一次。


為什麼要用單例模式?

想像你有一個配置管理器或是連接池,你不希望這些資源在系統中被重複建立,否則可能導致資源浪費或不一致的行為。在這些場合,單例模式就派上用場了!


實務應用:設定管理器

在許多應用中,我們都需要一個管理器來持有和管理全局的設定。這些設定可能來自於一個配置文件或環境變數,而且我們不想在整個應用程序中多次加載或解析它。這時候,單例模式就非常適用了。


設定結構

type AppConfig struct {
DatabaseURL string
APIKey string
// ... 其他設定欄位
}


單例實現

package config

import (
"sync"
"os"
)

type AppConfig struct {
DatabaseURL string
APIKey string
// ... 其他設定欄位
}

var instance *AppConfig
var once sync.Once

func GetConfig() *AppConfig {
once.Do(func() {
instance = &AppConfig{
DatabaseURL: os.Getenv("DATABASE_URL"),
APIKey: os.Getenv("API_KEY"),
// ... 加載其他設定
}
})
return instance
}


使用方式

在應用的任何地方,只需要呼叫config.GetConfig()即可取得設定。無論呼叫多少次,都是同一份設定,且設定只在第一次被加載。

package main

import (
"fmt"
"your_path/config"
)

func main() {
cfg := config.GetConfig()
fmt.Println(cfg.DatabaseURL)
}

這樣,你就有了一個單例設定管理器,不需要在每次需要設定時重新加載或解析,而且可以確保整個應用程序中的設定是一致的。

此實例展示了單例模式在實務中的一個常見應用,當然還有其他情境也適合使用單例模式,如連接池日誌管理器等。


結語

單例模式提供了一種很好的方式來保證在整個應用生命週期中,某個類別只有一個實例。而Go語言提供的sync.Once讓這一切變得簡單又安全。

下次,我們會繼續探索更多有趣的設計模式。希望你今天學到了些什麼,並期待你在Go的開發旅程中能夠運用所學!🚀

avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液