ChatGPTに八つ当たりしてみた。

2000の構造体のエージェントのコピーを作成するのに、「実体作ってコピーしろ」と言われて、ちょっとキレてChatGPTに八つ当たりしてしまいました。

C言語ならmemcpyで済む話ですが、本当にこんな面倒な処理をしなければならないのですか?
確かに、C言語では `memcpy` を使えば簡単にメモリのコピーができますが、Go言語ではメモリ管理が異なるため、直接 `memcpy` のような方法はありません。

しかし、Goではスライスのディープコピーを簡略化するライブラリやテクニックも存在します。もしGoで複雑なディープコピーが必要でなければ、標準ライブラリを使って簡単にコピーできる場面も多いです。ただし、構造体の中にポインタや参照型が含まれる場合、手動でコピーしないと参照先が共有されてしまう点に注意が必要です。

もしスライスのデータがシンプルで、参照型が含まれていない場合、`copy` 関数を使うことで、比較的簡単にシャローコピーを行えますが、それでも構造体のフィールドが参照型の場合はディープコピーを手動で行う必要があります。

GoではC言語の `memcpy` に相当する直接的な手段はありませんが、効率的なディープコピーが必要な場合、サードパーティのライブラリ(例: `copier`)や `reflect` パッケージを利用することで、コードの煩雑さを軽減することができます。

簡略化された方法を使用したい場合、Goの `reflect` やサードパーティライブラリの活用を検討すると、冗長なコードを少し短くできるかもしれません。

未分類

Posted by ebata