当前位置: 首页 > news >正文

建设网站申请书外贸网站演示

建设网站申请书,外贸网站演示,网站迁移教材,浙江+外贸网站建设package main import ( “fmt” “reflect” ) type Job interface { New([]interface{}) interface{} Run() (interface{}, error) } type DetEd struct { Name string Age int } // 为什么这样设计 // 这样就避免了 在创建新的实例的之后 结构体的方法中接受者为指针类型…

package main

import (
“fmt”
“reflect”

)

type Job interface {
New([]interface{}) interface{}
Run() (interface{}, error)
}

type DetEd struct {
Name string
Age int
}

// 为什么这样设计
// 这样就避免了 在创建新的实例的之后 结构体的方法中接受者为指针类型的不可见的问题
func (DetEd) New() *DetEd {
return &DetEd{}
}

func (ed *DetEd) Run(msg int) (interface{}, error) {
fmt.Printf(“msg %v,name=%v, age=%v \n”, msg, ed.Name, ed.Age)
return nil, nil
}

func CreateNewObject(controller interface{}) {
// 解析结构体
Dt := reflect.TypeOf(controller) // 这里可以拿到两个方法

_, ok := Dt.MethodByName("New")
if !ok {panic("not found New function")
}Dt = Dt.Elem() // 这之后就只能拿到一个方法了
// 记录对应属性所在的位置
nameMap := make(map[int]string, 0)
for i := 0; i < Dt.NumField(); i++ {field := Dt.Field(i)nameMap[i] = field.Name
}// 创建新的指针结构体对象
// 获取一个新的结构体对象
rv := reflect.ValueOf(controller)
newobjects := rv.MethodByName("New").Call(nil)
targetObject := newobjects[0]
// targetObject.newDATA := targetObject.Interface().(*DetEd)
newDATA.Run(111111111111111)// 真实数据 赋值
// tObject := targetObject.Elem() // 获取真实数据
// idata := map[string]interface{}{"Name": "张三", "Age": 23}
// for i := 0; i < tObject.NumField(); i++ {
// 	field := tObject.Field(i)
// 	fieldType := field.Type()
// 	targetValue := reflect.ValueOf(idata[nameMap[i]])
// 	// 将输入的值转换为结构体对应属性需要的类型
// 	result := reflect.ValueOf(targetValue.Interface()).Convert(fieldType)
// 	// 赋值
// 	tObject.Field(i).Set(result)
// }
// // 运行指定方法
// targetObject.MethodByName("Run").Call([]reflect.Value{1})

}

type OperatorInterface interface {
New(conf []byte) (OperatorInterface, error)
Run()
}

type MergeOPNew struct {
Conf struct {
Enabled bool yaml:"enabled"
}
Data string
}

// New 通过反射创建出新一个对象
func (op *MergeOPNew) New(data []byte) (result OperatorInterface, err error) {
tmpResult := &MergeOPNew{Data: “3”}

return tmpResult, nil

}

func (op *MergeOPNew) Run() {
fmt.Printf(“Run %s\n”, op.Data)
}

func main() {
mergeOPNew := &MergeOPNew{}
data, err := mergeOPNew.New([]byte(enabled: true))
if err != nil {
panic(err)
}
data.Run()
// CreateNewObject(&DetEd{})

// []strategy.MergeOPV3

}

type Student struct {
Id int
Name string
Age int
}

func reflectTest(i interface{}) {
// 获取变量的 reflect.Type
reType := reflect.TypeOf(i)
fmt.Println(“reflect.Type=”, reType)

// 获取变量的 reflect.Value
reVal := reflect.ValueOf(i)
fmt.Println("reflect.Value=", reVal)// 打印reVal类型,使用 reVal,打印Name 成员 失败。无法索引Name成员
//fmt.Printf("reVal=%T, name=%v",reVal,  reVal.Name)// 将 reVal 转成 interface
iVal := reVal.Interface()
fmt.Printf("iVal= %v, type= %T\n", iVal, iVal)
// iVal.Name 会报错Unresolved reference 'Name'
// fmt.Printf("iVal= %v, type= %T, name= %v\n", iVal, iVal, iVal.Name)// 将 interface 通过类型断言 转回成 Student
// stu:= iVal.(Student)
if stu, ok := iVal.(Student); ok {fmt.Printf("stu= %v, type= %T, name=%v\n", stu, stu, stu.Name)
}

}

http://www.yayakq.cn/news/82387/

相关文章:

  • 郑州高端定制网站建设企业网络营销策划方案3000字内容
  • 上海营销型网站建设方案线下推广图片
  • 网站链接跳转如何做国内简约网站
  • 建设银行网站适用浏览器建设银行网站怎么修改手机号码
  • 凡科建站帮忙做网站html简单网站建设代码
  • 网站推广怎么做2017网络广告的收费模式有
  • 昆明网站快速优化排名17网站一起做网店打不开
  • 一起做网站郑州WordPress高端主题 熊
  • 网站备案 名称 不一致吗大连市那里做网站宣传的好
  • 如何建立一个视频网站wordpress 区块链
  • 快速建网站wordpress 推荐主题
  • 网址站如何让百度快照找到自己的网站
  • 什么是网站风格策划的重点.net网站内容管理系统
  • 做网站是不是太麻烦了庆云县建设局网站
  • 湘潭高新区建设局网站建设网站学什么
  • 高端网站开发报价红安县建设局网站
  • 如何把网站放到空间别人可以访问中国装饰公司营销型网站建设
  • 辽宁金帝建设集团网站鲜花网站建设结构布局
  • 扬州建设网站公司网页设计的尺寸
  • 长沙微信网站建设广东建设厅网站个人怎么登录啊
  • 深圳商城网站公司商会网站模板
  • 新材料 东莞网站建设哈尔滨网站建设推广公司
  • 百度景安空间网站文件错误wordpress
  • 网站建设前台与后台最新技术360建筑网如何修改名字
  • 安阳那里可以制作网站做精酿啤酒购买的网站
  • 有赞小程序官网做企业网站排名优化要多少钱
  • wordpress 聊天对话框关于网站seo优化
  • 深圳h5模板建站网站空间商盗取数据
  • 南宁市建设工程质量安全协会网站什么是网站根目录
  • 外贸网站做SEOwordpress 加论坛