Corak Pemerhati melibatkan objek Penerbit yang memberitahu Pemerhati yang dilanggannya apabila kejadian tertentu berlaku. Bahasa Go menawarkan cara mudah untuk melaksanakan corak ini menggunakan saluran.
Untuk memahami cara ini berfungsi, mari kita pertimbangkan senario di mana berbilang objek melanggan Penerbit. Penerbit kemudiannya boleh menyiarkan pemberitahuan kepada semua pelanggan melalui saluran.
Berikut ialah contoh kod Go yang menunjukkan corak Pemerhati:
package main import "fmt" // Publisher is an object that can notify subscribers of an event. type Publisher struct { listeners []chan string } // Subscriber represents an object that can receive notifications from a Publisher. type Subscriber struct { ID int Channel chan string } // Sub adds a Subscriber to the Publisher's list of listeners. func (p *Publisher) Sub(sub *Subscriber) { p.listeners = append(p.listeners, sub.Channel) } // Pub sends a notification to the Publisher's subscribers. func (p *Publisher) Pub(msg string) { for _, c := range p.listeners { c <- msg } } // Run starts a Subscriber listening for notifications from the Publisher. func (s *Subscriber) Run() { for { msg := <-s.Channel fmt.Printf("Subscriber %d received: %s\n", s.ID, msg) } } func main() { // Initialize Publisher publisher := &Publisher{} // Create and add Subscribers for i := 0; i < 3; i++ { subscriber := &Subscriber{ID: i, Channel: make(chan string)} publisher.Sub(subscriber) go subscriber.Run() } // Send notifications publisher.Pub("Hello 1") publisher.Pub("Hello 2") publisher.Pub("Hello 3") }
Dalam contoh ini, Penerbit (Penerbit) mempunyai senarai daripada saluran (pendengar) tempat ia menyiarkan pemberitahuan. Pelanggan (Pelanggan) mempunyai saluran (Saluran) mereka sendiri untuk menerima pemberitahuan. Apabila Penerbit menghantar pemberitahuan (Pub), ia menghantarnya kepada semua pelanggan melalui saluran mereka. Setiap pelanggan kemudian mencetak pemberitahuan yang diterima. Ini menunjukkan cara Penerbit boleh menyiarkan kemas kini kepada pemerhatinya.
Atas ialah kandungan terperinci Bagaimanakah Saluran Boleh Digunakan untuk Melaksanakan Corak Pemerhati dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!