I have simple task that already done in javascript using pubsub, here is the task:
I have object let say A and another 2 object that have interest in some element(string in this case), let say Foo interest in element m, n and Bar interest in element n, o, p. The interest can intersect.
The A object have method adding/remove element and when that object contain m, n element which Foo interest in, then that object stored in Foo here's the pseudo code in javascript using pubsub
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
I want to porting this task into golang but i don't want using pubsub, i want more idiomatic to golang way. NOTE: i already done using pubsub in golang as well.
Can you show me how to do it in golang? i'm thingking using channel, but and can't find the solution.