当我在golang中使用make方法创建2D数组时,我正面临着“恐慌:运行时错误:索引超出范围”的问题

时间:2017-11-12 11:23:47

标签: arrays go

  

我是golang的新手,并尝试用小例子学习。

所以我正在尝试创建一个2D数组并分配一个值,但我被困在这里可以有人帮助我。这是我的代码。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, playground")

    letters := make([][]string,0,2)
    letters[0][0] = "a"
    letters[0][1] = "b"
    letters[1][0] = "c"
    letters[1][1] = "d"

    fmt.Println(letters)
}

运行此代码时出现错误

  

恐慌:运行时错误:索引超出范围

1 个答案:

答案 0 :(得分:0)

  

The Go Programming Language Specification

     

Array types

     

数组是单个类型的元素的编号序列,称为   元素类型。元素的数量称为长度   从不消极。

     

Slice types

     

切片是底层的连续段的描述符   数组并提供对该数字的编号序列的访问   阵列。切片类型表示其所有数组切片的集合   元素类型。未初始化切片的值为零。

     

Making slices, maps and channels

     

内置函数make采用类型T,它必须是切片,地图   或通道类型,可选地后跟特定类型的列表   表达式。它返回类型T的值(不是* T)。记忆是   如初始值一节中所述初始化。

     

Appending to and copying slices

     

内置函数在公共切片中追加和复制辅助   操作。对于这两个函数,结果与是否无关   参数引用的内存重叠。

     

可变参数函数append将零或更多值x附加到s   type S,必须是切片类型,并返回结果切片,   也是S型。

在Go中,数组和切片不是一回事。您的make([][]string,0,2)语句会创建一个2D切片。这是您的2D切片,其初始值为

package main

import (
    "fmt"
)

func main() {
    letters := make([][]string, 2)
    letters[0] = append(letters[0], "a", "b")
    letters[1] = append(letters[1], "c", "d")
    fmt.Println(letters)
}

游乐场:https://play.golang.org/p/l40xv_7W5h

输出:

[[a b] [c d]]