ドキュメントにもかかわらず、コピー関数の操作についてはさらに明確にする必要があるかもしれません。
copy 関数は、ソース スライスから同じ要素タイプの宛先スライスに要素を転送します。 copy は文字列からバイトのスライスにバイトをコピーする可能性があることに注意してください。
コピー関数のシグネチャは次のとおりです。
<code class="go">func copy(dst, src []Type) int</code>
ここで、
copy は基本的に、要素を src から dst に len(src) 要素と len(dst) 要素の最小値までコピーします。これは、宛先スライスがその容量を超えることなくソース スライスのすべての要素を確実に収容できることを意味します。
次のコードを考えてみましょう。
<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>
出力:
n = 5 src = [10 11 12 13 14] dst = [10 11 12 13 14]
この例では、src スライス全体が dst スライスにコピーされ、両方のスライスが次のようになります。
コピー機能は、重複するスライスでも使用できます。例:
<code class="go">copy(src, src[1:]) fmt.Println("n =", n, "src =", src)</code>
出力:
n = 4 src = [1 2 3 4 4]
このシナリオでは、src の最初の要素がコピーから除外され、残りの 4 つの要素は実質的に 1 インデックス分左にシフトされます。 、最初の要素を最後の要素で上書きします。
前述したように、copy を使用すると、文字列からバイトのスライスにバイトをコピーできます。以下に例を示します。
<code class="go">str := "Hello, World!" data := make([]byte, 5) n = copy(data, str) fmt.Println("n =", n, "str =", str, "data =", data)</code>
出力:
n = 5 str = Hello, World! data = [72 101 108 108 111]
コピー関数は、文字列の UTF-8 表現の最初の 5 バイトをデータ スライスにコピーします。
コピー関数は、重複するメモリを共有している場合でも、スライス間で要素を転送する効率的な方法を提供します。その多用途性により、Go プログラミングにおける貴重なツールとなります。
以上がGo では「copy()」関数はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。