main.go
package main
import (
"lch-test-free/replication"
"lch-test-free/retention"
"reflect"
)
type JobInterface interface {
Execute(map[string]interface{})
Validate()
}
func InitData() []interface{} {
rep := &replication.Replication{
Name: "devToStg",
}
ret := &retention.Retention{
Name: "保留最新100个制品",
}
jobs := make([]interface{}, 0)
jobs = append(jobs, rep)
jobs = append(jobs, ret)
return jobs
}
func main() {
jobs := InitData()
for _, job := range jobs {
runningJob := Wrap(job)
m := make(map[string]interface{})
m["name"] = "tianwenjing,wcnm"
runningJob.Execute(m)
}
}
// Wrap returns a new job.Interface based on the wrapped job handler reference.
func Wrap(j interface{}) JobInterface {
theType := reflect.TypeOf(j)
if theType.Kind() == reflect.Ptr {
theType = theType.Elem()
}
// Crate new
v := reflect.New(theType).Elem()
return v.Addr().Interface().(JobInterface)
}
replication/replication.go
package replication
func (r *Replication) Execute(map[string]interface{}) {
println("replication-", r.Name, " is executing!")
}
func (r *Replication) Validate() {
println("replication-", r.Name, " is valid!")
}
type Replication struct {
Name string
Src string
Dest string
}
retention/retention.go
package retention
func (r *Retention) Execute(params map[string]interface{}) {
var name = ""
if n, ok := params["name"]; ok {
if o := n.(string); ok {
name = o
}
}
println("retention-", name, " is executing!")
}
func (r *Retention) Validate() {
println("retention-", r.Name, " is valid!")
}
type Retention struct {
Name string
Tags string
ArtifactNumber string
}