Ответ 1
Есть ли встроенная функция в языке Go для копирования одного массива в другой?
Да: http://play.golang.org/p/_lYNw9SXN5
a := []string{
"hello",
"world",
}
b := []string{
"goodbye",
"world",
}
copy(a, b)
// a == []string{"goodbye", "world"}
Будет ли это работать в случае двух (или более) размерных массивов?
copy
сделает мелкую копию строк: http://play.golang.org/p/0gPk6P1VWh
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
copy(a, b)
// a and b look the same
b[1] = []string{"some", "new", "data"}
// b second row is different; a still looks the same
b[0][0] = "apple"
// now a looks different
Я не думаю, что есть встроенный инструмент для создания глубоких копий многомерных массивов: вы можете сделать это вручную: http://play.golang.org/p/nlVJq-ehzC p >
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
// manual deep copy
for i := range b {
a[i] = make([]string, len(b[i]))
copy(a[i], b[i])
}
b[0][0] = "apple"
// a still looks the same
edit: Как указано в комментариях, я предположил, что "копировать массив" означает "сделать глубокую копию среза", поскольку массивы могут быть глубоко скопированы с помощью оператора =
в соответствии с ответом jnml ( потому что массивы являются типами значений): http://play.golang.org/p/8EuFqXnqPB