douhoushou8385 2019-05-26 14:44
浏览 7

条件(动态)结构标签

I'm trying to parse some xml documents in Go. I need to define a few structs for this purpose, and my struct tags depend on a certain condition.

Imagine the following code (even though I know it won't work)

if someCondition {
    type MyType struct {
        // some common fields
        Date    []string `xml:"value"`
    }
} else {
    type MyType struct {
        // some common fields
        Date    []string `xml:"anotherValue"`
    }
}

var t MyType
// do the unmarshalling ...

The problem is that these two structs have lots of fields in common. The only difference is in one of the fields and I want to prevent duplication. How can I solve this problem?

  • 写回答

3条回答 默认 最新

  • duanlu2935 2019-05-26 15:03
    关注

    The simplest is probably to handle all possible fields and do some post-processing.

    For example:

    type MyType struct {
        DateField1    []string `xml:"value"`
        DateField2    []string `xml:"anotherValue"`
    }
    
    // After parsing, you have two options:
    
    // Option 1: re-assign one field onto another:
    if !someCondition {
        parsed.DateField1 = parsed.DateField2
        parsed.DateField2 = nil
    }
    
    // Option 2: use the above as an intermediate struct, the final being:
    type MyFinalType struct {
        Date    []string `xml:"value"`
    }
    
    if someCondition {
        final.Date = parsed.DateField1
    } else {
        final.Date = parsed.DateField2
    }
    

    Note: if the messages are sufficiently different, you probably want completely different types for parsing. The post-processing can generate the final struct from either.

    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测