広告スペース(バナー)
🐹Go レッスン
基本文法の基礎8
データ構造とオブジェクト指向7
構文の基本を深める9
関数とデータ構造の応用9
アルゴリズムとテストの基礎8
文字列・数値操作の応用8
実務で役立つ機能8
アルゴリズム練習問題10
レッスン 40 / 68

浅いコピーと深いコピーの違い

このレッスンでは、Goにおける浅いコピーと深いコピーの違いを学び、意図しないデータの共有によるバグを防げるようになることを目標にします。「Go言語 浅いコピー 深いコピー」で調べている方向けです。

Goの構造体を代入すると値がコピーされますが、中にポインタやマップ・スライスを含む場合は「浅いコピー」になり、参照先は元と共有されたままです。

サンプルコードでは、shallow := originalによりPerson構造体自体はコピーされますが、内部のAddressフィールドはポインタなので同じ実体を指したままです。そのためshallow.Address.City = "大阪"と変更すると、original.Address.Cityも「大阪」に変わってしまう様子を確認できます。

初心者がよくつまずくのが、「コピーしたはずなのに、元のデータまで書き換わってしまった」というバグです。これはポインタを含む構造体を扱うときに特に起こりやすいので注意しましょう。

実際の開発現場では、ポインタの扱い方を理解しておくことが、Goでバグの少ないコードを書くための重要な基礎知識になります。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではGoを直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
元のデータを壊さずに、安全に複製できるようになります。
広告スペース(バナー)
広告スペース(記事内)