【问题标题】:Create Struct instance with initialization from slices of data golang从数据切片 golang 创建具有初始化的 Struct 实例
【发布时间】:2016-12-31 18:16:24
【问题描述】:

我有一个数组数组的数据。

data := [][]int{{1,2,3}, {4,5,6}}

和结构

type A struct { I, J, K int }

现在我想使用数据中的每个数组为结构 A 创建实例运行时,我该如何实现?如果反射是一种方式,那么告诉你如何?

这只是我想给你看的一个例子。但是,假设结构 A 包含从 A 到 Z 的 26 个类型为 int 的字段,并且我有 100 个数据切片,我可以从中创建/初始化我的结构 A,那么在结构上不使用点表示法而只是循环怎么可能?覆盖字段索引并从切片数据中分配该字段?

package main

import (
    "fmt"
)

type A struct {
    I, J, K int
}

func main() {
    data := [][]int{
        {1, 2, 3},
        {4, 3, 2},
    }

    var a A
    // create instance of type A with params
    // initialization for each array in data
    fmt.Println(a)
}

请通过此链接帮助我:https://play.golang.org/p/rYuoajn5Ln

【问题讨论】:

  • 我看到了这个:stackoverflow.com/questions/7850140/…,但我不明白。
  • 您只是在寻找一个 for 循环吗? play.golang.org/p/88GiQuQyBP(另外,这些是切片而不是数组,在 Go 中是不同的)
  • 哦,对不起,这是个错误,是的,它们是切片,但假设我在结构中有 50 个字段和 100 个包含我的结构数据的切片,那么我该如何实现呢?
  • 您的意思是要通过反射设置字段? play.golang.org/p/QzHvhMnput
  • @JimB 这正是我想要的!!多谢兄弟。但我有一个问题,哪一个是这样做的好方法?通过反射还是通过硬编码分配?看到问这个背后的原因是我有 40 个字段的结构和 1000 个包含结构数据的切片,我需要好的解决方案。

标签: go struct initialization runtime


【解决方案1】:

我不确定这是否是您正在寻找的,但您可以在一个简单的循环中创建这些对象:

func main() {
    data := [][]int{
        {1, 2, 3},
        {4, 3, 2},
    }

    for _, intArr := range data {
        a := NewA(intArr)
        // a:= A{I: ints[0], J: ints[1], K: ints[2]}

        fmt.Println(a)
    }
}

https://play.golang.org/p/j7fxbmu3jp 提供完整解决方案

【讨论】:

  • 感谢您的回答。但是有没有其他方法可以让我们直接使用字段索引来执行此操作,例如为0 索引字段分配来自切片的0 索引数据的值?
【解决方案2】:

在这里,为了更紧凑的版本...

只需覆盖您的“数据”数组数组,并从每个索引创建一个新的“A”。

无需在单独的函数中执行此操作。

for _, arr := range data {
    a := A{I: arr[0], J: arr[1], K: arr[2]}

    fmt.Println(a)
}

完整解决方案在这里:https://play.golang.org/p/jyN7f9c-o-

【讨论】:

  • 感谢您的帮助,但我通过反思实现了这一目标。
猜你喜欢
  • 1970-01-01
  • 2016-10-06
  • 2017-11-19
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多