第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

go中的屬性更改通知

go中的屬性更改通知

Go
函數(shù)式編程 2021-09-27 17:32:54
您如何向 go 中的多個接收器發(fā)出“屬性”更改信號?類似于在 Qt 中使用通知信號定義屬性的方式。例如,如果您想象有一些需要以多種方式顯示的值,例如可以同時顯示為進度條和文本 % 的進度值,當基礎(chǔ)值更改時,兩者都需要更新。
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

一種方法可能是利用渠道。


您管理/更改需要監(jiān)聽的屬性或變量的中央代碼可能會提供一個GetChan()函數(shù),該函數(shù)返回一個通道,在該通道上將廣播修改(例如新值):


// The variable or property that is listened:

var i int


// Slice of all listeners

var listeners []chan int


func GetChan() chan int {

    listener := make(chan int, 5)

    listeners = append(listeners, listener)

    return listener

}

每當您更改變量/屬性時,您都需要廣播更改:


func Set(newi int) {

    i = newi

    for _, ch := range listeners {

        ch <- i

    }

}

并且偵聽器需要“偵聽”更改事件,這可以通過在由for range返回的通道上的循環(huán)來完成GetChan():


func Background(name string, ch chan int, done chan int) {

    for v := range ch {

        fmt.Printf("[%s] value changed: %d\n", name, v)

    }

    done <- 0

}

下面是主程序:


func main() {

    l1 := GetChan()

    l2 := GetChan()


    done := make(chan int)


    go Background("B1", l1, done)

    go Background("B2", l2, done)


    Set(3)

    time.Sleep(time.Second) // Wait a little

    Set(5)


    // Close all listeners:

    for _, listener := range listeners {

        close(listener)

    }


    // Wait 2 background threads to finish:

    <-done

    <-done

}

它的輸出:


[B1] value changed: 3

[B2] value changed: 3

[B1] value changed: 5

[B2] value changed: 5

您可以在Go Playground上試用完整的程序。


您還可以實現(xiàn)一個“代理”來實現(xiàn)訂閱者模型并允許廣播消息。


查看完整回答
反對 回復(fù) 2021-09-27
  • 1 回答
  • 0 關(guān)注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號