TLDR:我可以在golang中注册回调函数,以便在更改结构成员时收到通知吗?
我想在go服务器和角度客户端之间创建一个简单的双向绑定。通过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中是否有任何方法可以获得通知?或者是否有任何其他通用的方法可以轻松实现双向绑定而无需大量的样板代码?
答案 0 :(得分:1)
不,这是不可能的。
但真正的问题是:你怎么想在你的Go程序中使用所有这些魔法?
考虑一下你确实有可能做到的事情。 现在是无辜的任务
v.A = 42
除其他事项外,还会触发发送内容
通过与客户端的websocket连接。
现在如果连接关闭(客户端断开连接)会发生什么, 并且发送失败? 如果在截止日期之前发送未能完成,会发生什么?
好的,假设您至少部分地获得了它,并且只有在发送成功时才会对本地字段进行实际修改。 如何处理发送错误?
说,如果
中的第三个作业会发生什么 v.A = 42
v.B = "foo"
v.C = 1e10-23
失败?