douzong0711 2017-04-14 12:23
浏览 11
已采纳

使用反射的运行时结构

Assume I have data model written in some sort of yaml file.

schema: human
type: object
properties:
    name:
        type: string
    surname:
        type: string

I would like to parse it, and generate structure:

type Human struct {
    Name string `db:"name"`
    Surname string `db:"surname"`
}

Is it possible to generate runtime Go struct using reflection?

  • 写回答

1条回答 默认 最新

  • dongmi1663 2017-04-14 13:27
    关注

    Yes, you can with reflect.StructOf:

    sType := reflect.StructOf([]reflect.StructField{
        {Name: "Name", Type: stringType, Tag: reflect.StructTag(`db:"name" json:"name"`)},
        {Name: "Surname", Type: stringType, Tag: reflect.StructTag(`db:"surname" json:"surname"`)},
    })
    sv := reflect.New(sType)
    svi := sv.Interface()
    b, err := json.Marshal(svi)
    fmt.Printf("%s %v", b, err)
    

    Prints

    {"name":"","surname":""} <nil>
    

    Playground: https://play.golang.org/p/U4N3bbJ5n8.

    But as others have said, sometimes it's better to just generate code. Reflection is kinda wonky at times, and requires a lot of precision when using it.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题