2016-12-09 7 views
1

У меня есть данные с массивом массива.Создать экземпляр Struct с инициализацией из ломтиков данных golang

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

и структура

type A struct { I, J, K int }

Теперь я хочу, чтобы создать экземпляр во время выполнения для структуры А с каждым массивом из данных Как добиться того, ? Если размышление - это способ, то расскажите, как?

Это просто пример, который я хочу вам показать. Но предположим, что если структура A содержит 26 полей от A до Z с типом 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

+0

Я видел это: http://stackoverflow.com/questions/7850140/how-do-you-create-a-new-instance-of-a-struct -из-type-at-runtime-in-go, но я этого не понимаю. – rsudip90

+0

Вы просто ищете цикл for? https://play.golang.org/p/88GiQuQyBP (также, это фрагменты, а не массивы, которые отличаются от Go) – JimB

+0

Oh Извините, что это была ошибка, yup они являются срезами, но, допустим, у меня есть 50 полей в структуре и 100 ломтиками, которые содержат мои данные структуры, то как мне это достичь? – rsudip90

ответ

0

Я не уверен, если это то, что вы ищете, но вы можете создать эти объекты в простом цикле:

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» индексированных данных «0» из среза? – rsudip90

0

Вот он, для более компактной версии ...

Просто используйте массив массивов данных и создайте новый «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-

+0

Спасибо за вашу помощь, но я достиг этого через отражение. – rsudip90