【发布时间】:2017-10-15 11:05:04
【问题描述】:
我有一个使用 pubsub 在 javascript 中完成的简单任务,任务如下:
我有一个对象,比如说A 和另外两个对某些元素感兴趣的对象(在这种情况下是字符串),比如说Foo 对元素m, n 感兴趣,Bar 对元素n, o, p 感兴趣。兴趣可以相交。
A 对象具有添加/删除元素的方法,并且当该对象包含 Foo 感兴趣的 m, n 元素时,则该对象存储在 Foo 这是使用 pubsub 的 javascript 中的伪代码
var A = {};
var Foo = {
interests: ['m', 'n'],
storedObj: {},
tempObj: {}
};
// Bar same as Foo with different interest ['n', 'o', 'p']
// somewhere in Foo and Bar constructor
// Foo and Bar subscribe too each interests element
// for each interests when add
subscribe('add'+interest, function(obj) {
// store this obj in tempObj and increment until satisfy all
// interest
tempObj[obj]++;
// if this obj satisfy all interest then store it in array of obj
if(tempObj[obj] === len(interests)) {
storedObj[obj] = true;
}
});
// for each interests when remove
subscribe('remove'+interest, function(obj) {
// remove from storedObj
delete storedObj[obj];
// decrement tempObj so it can be used for later if the interest
// is adding again
tempObj[obj]--;
});
// inside A prototype
prototype.add = function(interest) {
publish('add'+interest, this);
return this;
}
prototype.remove = function(interest) {
publish('remove'+interest, this);
return this;
}
// implementation
A.add('m')
.add('n')
.add('o')
// then A is stored inside Foo but not in Bar because A doesn't have
// `p`, but it still stored Bar.tempObj and have value 2 and waiting
// for `p` to be add
A.remove('m')
.add('p')
// then A is removed from Foo and stored in Bar
我想将此任务移植到 golang 中,但我不想使用 pubsub,我想要更惯用的 golang 方式。注意:我也已经在 golang 中使用过 pubsub。
你能告诉我如何在 golang 中做到这一点吗?我正在使用频道,但找不到解决方案。
【问题讨论】:
标签: javascript go publish-subscribe channel