package utl // Job interface type IJob interface { Exec(interface{}) error } // Job in function style. // It also implements the IJob interface. type IJobFn func(interface{}) error func (fn IJobFn) Exec(inf interface{}) error { return fn(inf) } // Type of chan of Jobs type TJobChan chan *Job // Chan of Job chan type TJobPool chan TJobChan // Job object // composed with a job interface and its parameters type Job struct { param interface{} job IJob } // Job constructor func NewJob(job IJob, param interface{}) *Job { return &Job{ param: param, job: job, } } // Job executor func (self *Job) Do() error { return self.job.Exec(self.param) }