如何创建对象数组 - 转到?

时间:2014-04-09 12:31:05

标签: go

我在GoMongoDB工作,并拥有以下MongoDB架构

[   
  {
    "name":"sample",
    "time": "2014-04-05",
    "Qty":3
  },
  {
   "name":"sample",
   "time": "2014-04-05",
   "Qty":3
  }
]

我曾尝试使用以下代码创建上述文档

elements := make([3]map[string]string)
elements["name"] = "karthick"
elements["date"] = "2014-04-05"
elements["qty"] = 3

fmt.Println(elements)

但它没有用。

Error : cannot make type [3]map[string]string

任何建议都将不胜感激

2 个答案:

答案 0 :(得分:10)

数组和切片之间存在差异。数组是编译时对象,而切片是运行时对象。因此,阵列比切片(例如长度)具有更多的信息提供给编译器。

在您的代码中,您尝试创建一个包含3个元素的map[string]string数组。你可以这样做:

maps := [3]map[string]string{
    make(map[string]string),
    make(map[string]string),
    make(map[string]string),
}

必须为每张地图调用make,否则地图将被取消初始化(无)。

您还可以使用make:

创建包含3个(未初始化)元素的切片
maps := make([]map[string]string, 3)

在这种情况下,您必须迭代maps并使用make初始化每个元素。

如果您使用mgo,最简单的解决方案是为您的数据创建结构:

type Item struct {
    Name string `bson:name`
    Date string `bson:date`
    Qty int `bson:qty`
}

并在你的数组中使用它:

var items [3]*Item

答案 1 :(得分:1)

你想要达到什么目的?您混合了创建数组和映射的语法。

Here正在运作。

package main

import "fmt"

func main() {
    elements := make(map[string]interface{})
    elements["name"] = "karthick"
    elements["date"] = "2014-04-05"
    elements["qty"] = 3

    fmt.Println(elements)
}