簡體   English   中英

golang結構的雙向綁定

[英]Two-way-binding for golang structs

TLDR:如果結構成員發生更改,我可以在 golang 中注冊回調函數以獲得通知嗎?


我想在 go 服務器和 Angular 客戶端之間創建一個簡單的雙向綁定。 通信是通過 websockets 完成的。

例子:

去:

type SharedType struct {
    A int
    B string
}
sharedType := &SharedType{}
...
sharedType.A = 52

JavaScript:

var sharedType = {A: 0, B: ""};
...
sharedType.A = 52;

主意:

在這兩種情況下,修改值后,我想觸發自定義回調函數,通過 websocket 發送消息,並相應地更新客戶端/服務器端的值。

發送的消息應該只說明哪個值發生了變化(/索引)以及新值是什么。 它還應該支持嵌套類型(結構,包含其他結構),而無需傳輸所有內容。

在客戶端(角度)上,我可以通過注冊回調函數來檢測 JavaScript 對象的變化。

在服務器端(golang),我可以創建自己的map[]slice[]實現,以在每次修改成員時觸發回調(參見本示例中的Cabinet類: https ://appliedgo.net/generics/)。

在這些回調函數中,我可以將修改后的數據發送到另一端,因此可以對映射和切片進行雙向綁定。

我的問題:

我想避免類似的事情

sharedType.A = 52
sharedType.MemberChanged("A")
// or:
sharedType.Set("A", 52) //.. which is equivalent to map[], just with a predifined set of allowed keys

如果修改了結構成員,golang有什么方法可以得到通知? 或者是否有任何其他通用方法可以在沒有大量樣板代碼的情況下輕松進行雙向綁定?

不,這是不可能的。


但真正的問題是:你打算如何在你的 Go 程序中使用所有這些魔法?

考慮一下你想要的東西確實是可能的。 現在是一個無辜的任務

v.A = 42

會——除其他外——觸發通過 websocket 連接向客戶端發送內容。

現在如果連接關閉(客戶端斷開)並且發送失敗會發生什么? 如果在截止日期之前無法完成發送會怎樣?

好的,假設您至少部分正確,並且只有在發送成功時才會對本地字段進行實際修改。 不過,應該如何處理發送錯誤?

說,如果第三次分配會發生什么

 v.A = 42
 v.B = "foo"
 v.C = 1e10-23

失敗?

您可以嘗試使用服務器發送事件 (SSE) 將實時數據發送到前端,同時發送帶有您更改的單個發布請求。 這樣您就可以在后台監控並每秒發送數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM