ホームページ >バックエンド開発 >Golang >Go では「copy()」関数はどのように機能しますか?

Go では「copy()」関数はどのように機能しますか?

DDD
DDDオリジナル
2024-11-03 11:50:29449ブラウズ

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

Go ではコピー関数はどのように動作しますか?

ドキュメントにもかかわらず、コピー関数の操作についてはさらに明確にする必要があるかもしれません。

Built- in Copy Function

copy 関数は、ソース スライスから同じ要素タイプの宛先スライスに要素を転送します。 copy は文字列からバイトのスライスにバイトをコピーする可能性があることに注意してください。

コピー関数のシグネチャは次のとおりです。

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

ここで、

  • dst は宛先スライス。
  • src はソース スライスです。
  • 戻り値value はコピーされた要素の数です。

コピー関数操作

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。