索引数组的一部分

时间:2017-08-24 12:36:33

标签: arrays go

我总是golang(1.8)n00b试图快速索引数组的一部分。这就是我试过的:

 8:   data := make([]byte, 10)
 9:   row := &data[3]
10:   fmt.Println(row[0])

构建错误是:

10: invalid operation: row[0] (type *byte does not support indexing)

金星如果你在访问data数组时也知道是否有任何并行原语(互斥?),这可能会减慢写入速度,而不是让每个goroutine分配一个自己的数组。

1 个答案:

答案 0 :(得分:1)

首先,我建议您阅读此Go blog post以澄清数组切片之间的区别。

简单地说:

  • Arrays 是一个编号的元素序列。
  • 切片包含指向基础数组元素的指针,长度和容量。

你通常用C语言中的指针算术做什么,你用Go做切片。实际上,你很少直接在Go中使用数组。

<强>切片

在您的示例中,您可以执行以下操作:

data := make([]byte, 10) // Create a slice with length of 10
row := data[3:]          // Slicing a new slice starting from index 3. Length is 6
row[0] = 42
fmt.Println(data[3])

<强>输出:

  

42

使用切片,将底层数组/切片的不同部分传递给不同的Go例程,无需任何比赛。

但是如果您想让它们在同一个切片上工作,您可以使用sync.Mutex来保护它。