reflect.Copy() Function in Golang with Examples

Go language provides inbuilt support implementation of run-time reflection and allowing a program to manipulate objects with arbitrary types with the help of reflect package. The reflect.Copy() Function in Golang is used to copies the contents of the source into destination until either destination has been filled or source has been exhausted. To access this function, one needs to imports the reflect package in the program.

Syntax:

func Copy(dst, src Value) int

Parameters: This function takes two parameters of Slice or Array type. And dst and src must have the same element type.

Return Value: This function returns the number of elements copied.

Below examples illustrate the use of above method in Golang:



Example 1:

filter_none

edit
close

play_arrow

link
brightness_4
code

// Golang program to illustrate
// reflect.Copy() Function 
  
package main
  
import (
    "fmt"
    "reflect"
)
  
// Main function 
func main() {
  
    // Source 
    src := reflect.ValueOf([]int{10, 20, 32})
      
    /* make sure the dest space is larger than src */
    // destination 
    dest := reflect.ValueOf([]int{1, 2, 3})
      
    // To copy Copy() function is used
    // and it returns the number of 
    // elements copied
    cnt := reflect.Copy(dest, src)
    data := dest.Interface().([]int)
    data[0] = 100
      
    // printing the values
    fmt.Println("Number of element Copied :", cnt)
    fmt.Println("Source :", src)
    fmt.Println("destination :", dest)
}
chevron_right

Output:

Number of element Copied : 3
Source : [10 20 32]
destination : [100 20 32]

Example 2:

filter_none

edit
close

play_arrow

link
brightness_4
code

// Golang program to illustrate
// reflect.Copy() Function 
  
package main
  
import (
    "fmt"
    "reflect"
)
  
// Struct with two int value
type temp struct {
    A0 []int
    A1 []int
}
  
// Main function 
func main() {
      
    var val temp
      
    // Source 
    val.A0 = append(val.A0, []int{1, 2, 3,
                    4, 5, 6, 7, 8, 9}...)
      
    // destination 
    val.A1 = append(val.A1, 9, 8, 7, 6)
      
    // To copy Copy() function is used
    // and it returns the number of 
    // elements copied
    var n = reflect.Copy(reflect.ValueOf(val.A0), 
                        reflect.ValueOf(val.A1))
      
    // printing the values
    fmt.Println("Number of element Copied :", n)
    fmt.Println("{Source, destination} :", val)
      
}
chevron_right

Output:

Number of element Copied : 4
{Source, destination} : {[9 8 7 6 5 6 7 8 9] [9 8 7 6]}




Small things always make you to think big

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :