copy() が空のスライスの複製に失敗する理由を理解する
Go では、copy() 関数は 2 つのスライス間で要素をコピーすることを目的としています。 、プロセスの潜在的な重複を考慮します。ただし、空のスライスをコピーしようとすると、予期しない動作が発生する可能性があります。
問題の根本:
ドキュメントには、copy() が要素をコピーすると記載されています。ソース スライスを宛先スライスに変換し、コピーされた要素の数を返します。重要なのは、この数は、Go 言語仕様で指定されているように、ソース スライスと宛先スライスの最小長によって決まります。
空の宛先スライスの問題:
宛先スライスが空 (つまり、len(dst) == 0) の場合、最小長はゼロになり、要素はコピーされません。これが、この例で copy() が tmp スライスの設定に失敗した理由です。
解決策:
この問題を回避して空のスライスを正常にコピーするには、次のようにする必要があります。まず、宛先スライスを十分な容量で初期化します。これは、make([]int, len(arr)) を使用して実現できます。
更新されたドキュメント:
copy() のドキュメントが更新され、明示的に記述されました。ソースと宛先のスライス長の最小値がコピーされること。この明確化により、空のスライスを複製しようとしたときに発生する不一致が解決されます。
以上がGo で「copy()」が空のスライスの複製に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。