Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saluran Boleh Digunakan untuk Melaksanakan Corak Pemerhati dalam Go?

Bagaimanakah Saluran Boleh Digunakan untuk Melaksanakan Corak Pemerhati dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 05:01:02972semak imbas

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")
}

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!

Kenyataan:
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