Corak Pemerhati dalam Bahasa Go
Dalam kejuruteraan perisian, corak Pemerhati digunakan apabila perlu untuk memberitahu koleksi pelanggan apabila acara berlaku dalam sesuatu objek. Rangka kerja biasa untuk mencapai ini dalam C ialah boost::signals. Soalan ini meneroka cara untuk meniru fungsi ini dalam Go, menggunakan contoh yang menunjukkan cara berbilang pelanggan boleh mendaftar dengan penerbit dan menerima pemberitahuan.
Penyelesaian
Corak Pemerhati boleh dilaksanakan dengan mudah dalam Go menggunakan saluran. Tujuan sedia ada mereka adalah untuk memudahkan komunikasi antara goroutine serentak.
type Publisher struct { listeners []chan *Msg } type Subscriber struct { Channel chan *Msg } func (p *Publisher) Sub(c chan *Msg) { p.appendListener(c) } func (p *Publisher) Pub(m *Msg) { for _, c := range p.listeners { c <- Msg } } func (s *Subscriber) ListenOnChannel() { for { data := <-s.Channel //Process data } } func main() { for _, v := range subscribers { p.Sub(v.Channel) go v.ListenOnChannel() } //Some kind of wait here }
Walaupun contoh ini bukan contoh kod kerja yang lengkap, ia menyediakan asas yang kukuh untuk melaksanakan corak Pemerhati dalam Go menggunakan saluran.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Corak Pemerhati dalam Go Using Channels?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!