func (publisherSelf *PublisherDef) Subscribe(sub Subscription) *Subscription {
	s := &sub
	publisherSelf.doSubscribeSafe(func() {
		publisherSelf.subscribers = append(publisherSelf.subscribers, s)
	})
	return s
}
Subscribe Subscribe the Publisher by Subscription
package fpgo
import "sync"
type PublisherDef struct {
	subscribers []*Subscription
	subscribeM  sync.Mutex
	subOn       *HandlerDef
	origin *PublisherDef
}
func (publisherSelf *PublisherDef) New() *PublisherDef {
	p := &PublisherDef{}
	return p
}
func (publisherSelf *PublisherDef) Map(fn func(interface{}) interface{}) *PublisherDef {
	next := publisherSelf.New()
	next.origin = publisherSelf
	publisherSelf.Subscribe(Subscription{
		OnNext: func(in interface{}) {
			next.Publish(fn(in))
		},
	})
	return next
}