Melaksanakan Corak Reka Bentuk Singleton dalam Go
Corak reka bentuk Singleton mengehadkan instantiasi kelas kepada objek tunggal. Walaupun penggunaannya sering diperdebatkan, dalam senario tertentu, ia boleh menjadi penyelesaian praktikal.
Pelaksanaan
Untuk melaksanakan corak Singleton dalam Go, kita mulakan dengan perkara berikut kod:
package singleton type single struct { O interface{}; } var instantiated *single = nil func New() *single { if instantiated == nil { instantiated = new(single); } return instantiated; }
Di sini, satu struct peribadi mentakrifkan objek yang ingin kami hadkan kepada satu kejadian. Pembolehubah persendirian yang di instantiated menjejaki instantiasi objek. Kami mentakrifkan fungsi awam New() untuk mendapatkan semula tika.
Keselamatan Benang
Walau bagaimanapun, pelaksanaan ini tidak selamat untuk benang. Untuk menangani perkara ini, kita boleh menggunakan penyegerakan.Sekali taip:
package singleton import "sync" type single struct { O interface{}; } var instantiated *single var once sync.Once func New() *single { once.Do(func() { instantiated = &single{} }) return instantiated }
Di sini, penyegerakan.Sekali memastikan bahawa singleton hanya dibuat seketika, walaupun dalam persekitaran serentak.
Alternatif
Sebagai alternatif, adalah wajar mempertimbangkan skop peringkat pakej sebagai cara mudah untuk menguatkuasakan tingkah laku tunggal.
Ringkasnya, melaksanakan corak Singleton dalam Go melibatkan kawalan penciptaan contoh melalui satu fungsi. Keselamatan benang boleh dicapai menggunakan penyegerakan. Sekali. Walau bagaimanapun, seperti yang dicadangkan, adalah bijak untuk mempersoalkan keperluan singleton dalam kod anda untuk memastikan reka bentuk yang tersusun dan boleh diselenggara dengan baik.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Corak Reka Bentuk Singleton dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!