golang反射高阶用法

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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值