Go での配列へのポインタの使用: 代替案の探索
Google の Go 言語では、特に配列を操作しようとするときに、課題が発生することがあります。関数内でそれらへのポインタを渡します。この質問では、ポインタを使用して関数内の配列スライスにアクセスしようとしたときに発生した特定の問題について調査します。
最初の仮定は、ポインタを配列スライスに渡すことで、その要素に直接アクセスできるというものでした。しかし、このアプローチでは Go コンパイラからのエラーが発生し、もっと良い方法はないのかという疑問が生じました。
さらに調査した結果、Go の効果的な Go ドキュメントでは、配列へのポインタではなくスライスを渡すことを推奨していることがわかりました。ほとんどの場合。これは、スライスが参照型であり、渡すのに効率的であるためです。
スライスベースのアプローチを使用して関数を書き直す方法は次のとおりです。
func conv(x []int, h []int) { y := make([]int, len(x)+len(h)-1) for i := 0; i < len(x); i++ { for j := 0; j < len(h); j++ { y[i+j] += x[i] * h[j] } } }
代わりにスライスを使用することを選択すると、質問に記載されている回避策は不要になります。さらに、このアプローチは、配列とスライスを関数に効果的に渡すための Go の推奨プラクティスと一致しています。
以上がGo で配列を渡すときにポインターの代わりにスライスを使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。