(целое число) индекс среза в виде массива структур - PullRequest
0 голосов
/ 19 декабря 2018

Возможно ли в Go создать массив, где каждый элемент массива будет массивом срезов или структур.

Что-то вроде в PHP

    $a = [1=>"test", 2=>""]
    // in this example 2 is integer will be for GoLang?
    $a[2] = [ object, object, object ]

Могу ли я сделать в Go что-то вроде?Я знаю о неправильном синтаксисе.

   var a [int][]StructureName

   b := make([]StructureName, 0)
   b := append ( b, StructureName{a, b, c, d})
   b := append ( b, StructureName{e, f, g, h})

   a[0] = append (a[0][0], b)

`/*
[
1 => [
    ‘username1’, <-- string element
    ‘events’=>[ <-- array of structures
        object1, <-- structure
        object2, <-- structure
        object3 <-- structure
        ]
    ],
2 => [ <-- next record
    ‘username2’,
    ‘events’=>[
        object1,
        object2,
        object3
        ]
    ]
]
*/
`

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Объявите типы, которые соответствуют структуре данных.Это обеспечивает безопасность типов и избавляет от необходимости вводить assert при доступе к данным.

В этом случае, похоже, вам нужен фрагмент структур, где одно из полей также является фрагментом структур событий.

type Event struct {
    // Even fields TBD
}

type User struct {
    Name string
    Events []*Event
}

var users []*User

users = append(users, &User{
    Name: "name1",
    Events: []*Event{ object1, object2, object3 },
})
0 голосов
/ 19 декабря 2018

Вы можете использовать карту и отобразить ее из int => interface {}.

package main

import (
    "fmt"
)

func main() {
    m := make(map[int]interface{})
    var x []interface{}
    x = append(x, "username")
    x = append(x, []int{3, 1, 3})
    m[1] = x
    fmt.Println(m)
}

https://play.golang.org/p/B_dsvARic8c

Надеюсь, это поможет.

...