Singleton là một mẫu thiết kế (design pattern) giúp hạn chế việc khởi tạo một lớp (class) chỉ có một instance duy nhất và cung cấp một điểm truy cập toàn cục đến instance này.
Mục đích của mẫu Singleton là đảm bảo rằng một lớp chỉ có một instance và cung cấp một cách để truy cập instance này từ bất kỳ nơi nào trong ứng dụng. Nó thường được sử dụng cho các lớp mô tả các hoạt động hoặc cài đặt trên toàn hệ thống, nơi chỉ cần một instance duy nhất, như quản lý cấu hình, dịch vụ ghi log, hoặc bể kết nối cơ sở dữ liệu.
Dưới đây là một cách triển khai cơ bản của mẫu Singleton trong Go:
package main import ( "fmt" "sync" ) type Singleton struct { data int } var instance *Singleton var once sync.Once func GetInstance() *Singleton { once.Do(func() { instance = &Singleton{data: 42} // 42 is just a placeholder value }) return instance } func main() { s1 := GetInstance() s2 := GetInstance() if s1 == s2 { fmt.Println("Both instances are the same.") } }
- Chúng ta sử dụng loại
sync.Once
để đảm bảo rằng mã khởi tạo bên trong phương thứconce.Do()
chỉ được thực hiện một lần. - Hàm
GetInstance()
cung cấp một cách để truy cập instance duy nhất của loạiSingleton
. - Trong hàm
main()
, chúng ta lấy hai instance của loạiSingleton
bằng cách sử dụngGetInstance()
và sau đó xác minh rằng chúng là cùng một instance.
Đây chỉ là một cách để triển khai mẫu Singleton trong Go. Có những phương pháp và xem xét khác tùy thuộc vào yêu cầu cụ thể và ngữ cảnh sử dụng.