复印功能是如何工作的? [英] How does the copy function work?

查看:33
本文介绍了复印功能是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白根据文档copy函数是如何工作的:

复制内置函数用于将源片中的元素复制到 目标切片。(作为特殊情况,它还将从 字符串转换为一段字节。)源和目标可能会重叠。复制 返回复制的元素数,这将是 LEN(源)和LEN(DST)。

func copy(dst, src []Type) int

推荐答案

该规范还涵盖了内置函数append()copy()Appending to and copying slices。你应该读一读,它很清楚。

让我们用简单的例子分析一下内置copy()函数的文档及其用法。您可以在Go Playground上尝试所有示例。

签名:

func copy(dst, src []Type) int

copy()是一个函数,它有两个参数,一个是目的分片,一个是源分片,它们的元素类型相同。它返回一个int类型的数字,这是实际复制的元素数。

COPY内置函数将元素从源片复制到目标片。

copy()会将元素从src切片复制到dst切片。

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)

输出:

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

它复制了全部5个元素,复制后目标具有与源相同的元素。

让我们继续该示例:

dst = []int{0, 1}

n = copy(dst, src)
fmt.Println("n =", n, "src =", src, "dst =", dst)

输出:

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

仅复制了%2个元素,因为目标只有%2个元素。

继续:

src = []int{10, 11}
dst = []int{0, 1, 2, 3, 4}

n = copy(dst, src)
fmt.Println("n =", n, "src =", src, "dst =", dst)

输出:

n = 2 src = [10 11] dst = [10 11 2 3 4]

同样,仅复制了%2个元素,但这一次是因为源只有%2个元素。

因此copy()将只复制与源或目标相同数量的元素,以较小者为准。或者换句话说,只要源"提供"或目的地可以"容纳"较小的那个,就可以容纳多少个。

(作为特殊情况,它还会将字节从字符串复制到字节片段。)

这意味着如果目标是[]byte,则源也可以是string

str := "Hello World!"
data := make([]byte, 5)
n = copy(data, str)
fmt.Println("n =", n, "str =", str, "data =", data)
fmt.Printf("data as string: %s
", data)

输出:

n = 5 str = Hello World! data = [72 101 108 108 111]
data as string: Hello

这次源是stringcopy()复制了string的UTF-8表示形式的5个字节(这是Go在内存中存储字符串的方式)。

源和目标可能重叠。

这意味着,即使目标是与源片共享相同基础数组的片,并且源和目标指定的数组部分具有公共部分(重叠),copy()也可以正常工作。

例如:

copy(src, src[1:])
fmt.Println("n =", n, "src =", src)

输出:

n = 4 src = [1 2 3 4 4]
在这里我指定src[1:]作为源,这是没有第一个元素的源(这是reslicing)。由于我排除了第一个元素,copy()的源有4个元素,因此复制了4元素。结果是元素被"移动"到小于1的索引(因此,第一个元素0现在从切片中消失),而最后一个元素没有变化(因为只复制了4个元素)。

Copy返回复制的元素数,这将是len(Src)和len(Dst)中的最小值。

我们在上面的示例中看到了这一点。

如果您需要了解有关切片的更多信息:

Go Slices: usage and internals

Arrays, slices (and strings): The mechanics of 'append'

这篇关于复印功能是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆