ホームページ > バックエンド開発 > Golang > 関数内の Go スライスを変更して、その変更を元のスライスに反映するにはどうすればよいですか?

関数内の Go スライスを変更して、その変更を元のスライスに反映するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-19 14:07:16
オリジナル
461 人が閲覧しました

How Can I Modify a Go Slice in a Function and Have the Changes Reflected in the Original Slice?

元のスライスを変更するための参照によるスライスの受け渡し

Go では、スライスは値によって渡されます。これは、関数内でスライスを変更することを意味します。関数外の元のスライスには影響しません。この制限を克服するには、スライスへのポインタを渡し、関数が参照によって元のスライスを変更できるようにします。

スライスへのポインタの渡し

Toスライスへのポインタを渡す場合、関数シグネチャにはスライスのポインタ型が含まれている必要がありますパラメーター:

func modifySlice(slice *[]int) {
    *slice = append(*slice, 4)
}
ログイン後にコピー

例:

nums := []int{1, 2, 3}
modifySlice(&nums)
fmt.Println(nums) // Prints [1, 2, 3, 4]
ログイン後にコピー

この例では、modifySlice 関数は整数のスライスへのポインターを受け取ります。関数内で、アスタリスク (*) 演算子はポインターを逆参照して元のスライスを取得し、スライスに 4 を追加します。

変更されたスライスを返す

別のアプローチ関数から変更されたスライスを返すことです:

nums := []int{1, 2, 3}

func modifyAndReturnSlice(slice []int) []int {
    return append(slice, 4)
}

nums = modifyAndReturnSlice(nums)
fmt.Println(nums) // Prints [1, 2, 3, 4]
ログイン後にコピー

このアプローチは Go では慣用的ですスライスへのポインタを渡す必要はありません。

適切なアプローチの選択

スライスへのポインタを渡すか、変更されたスライスを返すかの選択は、関数とコード構造の特定の要件。ポインターを渡すことは、複数のスライスを反復して変更する必要がある場合、または変更が複雑な場合に便利です。関数が 1 つのスライスを変更するだけでよく、変更が簡単な場合は、変更されたスライスを返すことをお勧めします。

以上が関数内の Go スライスを変更して、その変更を元のスライスに反映するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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