Bagaimanakah Saluran Boleh Digunakan untuk Melaksanakan Corak Pemerhati dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-06 05:01:02
asal
902 orang telah melayarinya

How Can Channels Be Used to Implement the Observer Pattern in Go?

Pelaksanaan Bahasa Goo bagi Corak Pemerhati

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")
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!