Is there any built-in function in Go for copying one array to another? Will this work in case of two (or more) dimensional arrays?
Golang does not provide a specific inbuilt function to copy one array into another array. But we can create a copy of an array by simply assigning an array to a new variable by value or by reference.
splice . It returns a new array copying to it all items from index start to end (not including end ).
Is there any built-in function in Go language for copying one array to another?
Yes: http://play.golang.org/p/_lYNw9SXN5
a := []string{ "hello", "world", } b := []string{ "goodbye", "world", } copy(a, b) // a == []string{"goodbye", "world"}
Will this work in case of two (or more) dimensional arrays?
copy
will do a shallow copy of the rows: 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's second row is different; a still looks the same b[0][0] = "apple" // now a looks different
I don't think there's a built-in for doing deep-copys of multi-dimensional arrays: you can do it manually like: http://play.golang.org/p/nlVJq-ehzC
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: As pointed out in the comments, I assumed by "copy an array" you meant "do a deep copy of a slice", as arrays can be deep-copied with the =
operator as per jnml's answer (because arrays are value types): http://play.golang.org/p/8EuFqXnqPB
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With