関数に渡されたスライスを変更する
Go では、パラメーターは値によって渡されます。つまり、変更は関数内のスライスに行われます。この関数は元のスライスには影響しません。これは、再帰関数を使用してアキュムレータ スライスを変更する場合に問題を引き起こす可能性があります。
スライスへのポインタの受け渡し
元のスライスを変更するには、次のようにします。関数パラメータとしてスライスへのポインタを渡すことができます。これにより、関数はポインタを介して元のスライスを変更できます。
例:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
更新されたソリューション
ポインタを渡す代わりにスライスに追加すると、再帰関数から変更されたスライスを返すことができます。これにより、関数はスライス内の値を蓄積し、呼び出し元に最終結果を返すことができます。
func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) { // ... return validate(v, messages) }
慣用的なアプローチ
スライスにポインターを渡す、または変更されたスライスを返すことは、どちらも Go における慣用的なアプローチです。どのアプローチを使用するかの選択は、関数の特定の要件によって異なります。
注:
ポインターを使用してスライスを変更する場合は、ポインターがnil ではなく、スライスが同時に変更されていないこと。
以上がオリジナルに影響を与えずに Go 関数のスライスを変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。