gpt4 book ai didi

go - 如何在不牺牲内存的情况下组织类似的结构以避免重复

转载 作者:行者123 更新时间:2023-12-01 22:37:19 27 4
gpt4 key购买 nike

我必须重构代码,但我不知道如何最好地定义我的结构。

我有一个仪表列表[]Meter
Meter

type Meter struct {
ID string `json:"meter_id"`
ConsoProd string `json:"conso_prod"`
OperationID string `json:"op_id"`
Measures []Measure `json :"measures"`
}

第 3 个字段将始终在此处,但 Measure 有几个变体,具体取决于过程中的步骤。

这是一般 Measure结构:
// Measure is a measure from a Meter
type Measure struct {
IndexName string `json:"index_name"`
IndexValue int `json:"index_value"`
Timestamp time.Time `json:"timestamp"`
Delta float64 `json:"delta"`
Redistributed float64 `json:"redistributed,omitempty"` // We don t need the redistributed field in Raw Measure
}

首先,我们得到“原始值”
type RawMeasure struct {
IndexName string `json:"index_name"`
IndexValue int `json:"index_value"`
Timestamp time.Time `json:"timestamp"`
Delta float64 `json:"delta"`
}

然后我们将计算重新分配,并将其存储到 redistributed field

该措施将永远不会重新分配。

另外,我有 2 个数据源。如果 Data 来自 source2,它永远不会有 IndexName/IndexValue
type RawMeasureFromSource2 struct {
Timestamp time.Time `json:"timestamp"`
Delta float64 `json:"delta"`
}

在这里我们可以看到我可以创建几个结构: (RawMeasure, RawMeasureFromSource2, Measure) 然后我应该创建其他 3 Meters 变量。

由于我将管理大量数据,因此我需要小心优化内存,但这似乎会使我的代码复杂化很多。

有没有办法同时获得简单的代码和优化的内存使用?

最佳答案

根据评论,每 10 分钟测量 1 次绝对不是很多。
我会为了简单起见:

type Measure struct {
IndexName *string `json:"index_name,omitempty"`
IndexValue *int `json:"index_value,omitempty"`
Timestamp time.Time `json:"timestamp"`
Delta float64 `json:"delta"`
Redistributed *float64 `json:"redistributed,omitempty"`
}

优点:
  • 相同的结构,易于使用

  • 缺点:
  • 每个结构实例丢失的字节数很少
  • 关于go - 如何在不牺牲内存的情况下组织类似的结构以避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137736/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com