Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Corak Pemerhati dalam Go Using Channels?

Bagaimana untuk Melaksanakan Corak Pemerhati dalam Go Using Channels?

Barbara Streisand
Barbara Streisandasal
2024-11-05 12:59:02263semak imbas

How to Implement the Observer Pattern in Go Using Channels?

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!

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