ホームページ > バックエンド開発 > Golang > オリジナルに影響を与えずに Go 関数のスライスを変更するにはどうすればよいですか?

オリジナルに影響を与えずに Go 関数のスライスを変更するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-21 00:15:17
オリジナル
475 人が閲覧しました

How Can I Modify a Slice in a Go Function Without Affecting the Original?

関数に渡されたスライスを変更する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート