Home >Backend Development >Golang >How does the `copy()` function work in Go?

How does the `copy()` function work in Go?

DDD
DDDOriginal
2024-11-03 11:50:29449browse

How does the `copy()` function work in Go?

How Does the Copy Function Work in Go?

Despite the documentation, the operation of the copy function may require further clarification.

Built-in Copy Function

The copy function transfers elements from a source slice to a destination slice of the same element type. Note that copy may copy bytes from a string to a slice of bytes.

The copy function's signature is:

<code class="go">func copy(dst, src []Type) int</code>

Where:

  • dst is the destination slice.
  • src is the source slice.
  • The return value is the number of elements copied.

Copy Function Operation

copy essentially copies elements from src to dst up to the minimum of len(src) and len(dst) elements. This means it ensures that the destination slice can accommodate all elements from the source slice without exceeding its capacity.

Example

Consider the following code:

<code class="go">package main

import "fmt"

func main() {
    src := []int{10, 11, 12, 13, 14}
    dst := []int{0, 1, 2, 3, 4}

    n := copy(dst, src)
    fmt.Println("n =", n, "src =", src, "dst =", dst)
}</code>

Output:

n = 5 src = [10 11 12 13 14] dst = [10 11 12 13 14]

In this example, the entire src slice is copied into the dst slice, resulting in both slices having the same elements.

Overlapping Slices

The copy function can also be used with overlapping slices. For example:

<code class="go">copy(src, src[1:])
fmt.Println("n =", n, "src =", src)</code>

Output:

n = 4 src = [1 2 3 4 4]

In this scenario, the first element of src is excluded from copying, and the remaining four elements are effectively shifted one index to the left, overwriting the first element with the last element.

Special Case: Copying Strings to Byte Slices

As mentioned earlier, copy allows copying bytes from a string to a slice of bytes. Here's an example:

<code class="go">str := "Hello, World!"
data := make([]byte, 5)
n = copy(data, str)
fmt.Println("n =", n, "str =", str, "data =", data)</code>

Output:

n = 5 str = Hello, World! data = [72 101 108 108 111]

The copy function copies the first five bytes of the UTF-8 representation of the string into the data slice.

Conclusion

The copy function provides an efficient way to transfer elements between slices, even when they share overlapping memory. Its versatility makes it a valuable tool in Go programming.

The above is the detailed content of How does the `copy()` function work in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn