RSS ジュリア・エヴァンス
フォロー
Go 構造体は割り当て時にコピーされる (そして Go についての他の誤解)
著者は、Goのカジュアルプログラマーで、構造体が割り当てられたときにコピーされるという基本的な誤解を明らかにするバグに遭遇しました。この誤解は、構造体が割り当てられたときに参照されるのではなくコピーされるという事実に基づいています。この結果、別の変数に構造体を割り当てた後で構造体を変更すると予想外の動作が生じました。著者は、他の言語での経験から変数が一般的に参照によって渡されるという信念を持っており、この動作に驚きました。この誤解は、関数引数でのパス・バイ・バリューとパス・バイ・レファレンスの著者の理解も複雑化させましたが、変数の割り当てにはこれらの概念を適用していませんでした。著者はまた、Goのサブスライスが元のスライスと同じバッキングアレイを共有していることを発見し、サブスライスに追加すると元のスライスが意図せず変更される可能性があることを学びました。さらに、著者は、Goのメソッドにおける値レシーバーとポインターレシーバーの違いを明確にし、メソッドが呼び出された構造体を変化させる必要がある場合はポインターレシーバーが必要であることを理解しました。著者は、「100 Go Mistakes」リソースを高く評価し、明確かつコンパクトなフォーマットで一般的なGoの落とし穴を素早く学びました。最後に、著者は、有益なGoリソースとして「Go by Example」、「go.dev/play」、静的解析ツールの「staticcheck」や「golangci-lint」などをリストアップしました。