我总是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分配一个自己的数组。
答案 0 :(得分:1)
首先,我建议您阅读此Go blog post以澄清数组和切片之间的区别。
简单地说:
你通常用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
来保护它。