【问题标题】:(integer) index of slice as array of structures(整数)切片索引作为结构数组
【发布时间】:2023-03-26 21:53:01
【问题描述】:

是否可以在 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
        ]
    ]
]
*/
`

【问题讨论】:

  • 你能说得清楚一点吗?你想创建数组数组吗?
  • 我需要使用第一个元素和用户名创建数组,第二个元素和结构数组(包含此用户名的事件的记录)啊哈,我需要另外 1 个数组,所有这些数组都将包含在内所以,是的,它将是数组数组

标签: arrays dictionary go slice


【解决方案1】:

声明与数据结构匹配的类型。这确保了类型安全并避免了在访问数据时需要键入断言。

在这种情况下,您似乎需要一个结构切片,其中一个字段也是一个事件结构切片。

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 },
})

【讨论】:

  • 你为什么使用 var users []*User 而不是 var users []User 与 []*Event 相同。只是为了我的个人兴趣,因为我正在学习!
  • 我认为他正在使用是因为安全问题。这是一个指针。
  • 无论哪种方式都可以。问题中没有足够的信息来了解什么是最好的。鉴于 User 有一个 slice 成员,[]*User 可能是比[]User 更好的选择。以两种方式编写代码以查看原因。我们对Event 类型一无所知。
【解决方案2】:

您可以使用 map 并从 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

希望这会有所帮助。

【讨论】:

  • 之后我可以创建接口数组吗?对吗?
  • 检查更新的答案并浏览链接中的代码
  • @DmytroKravchenko 是的,你可以
  • 这是一个很好的答案 =) Tnx.
  • 当你知道你的领域时,我会选择 ThunderCats 解决方案,因为接口{}可能会增加很多麻烦
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
相关资源
最近更新 更多