ホームページ > バックエンド開発 > Golang > Go で引数として渡されたスライスを効果的に変更するにはどうすればよいですか?

Go で引数として渡されたスライスを効果的に変更するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-30 18:06:19
オリジナル
161 人が閲覧しました

How Can I Effectively Modify Slices Passed as Arguments in Go?

Go でスライスを効果的に渡す: 値渡しの制限を回避する

Go では、関数の引数としてスライスを渡すことは、基本的に値によって行われます。これは、関数内で append を使用して引数スライスが変更された場合、関数のスコープ外にある元のスライスには影響しないことを意味します。

この制限を説明するために、次の例を考えてみましょう。

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

func addToNumbs(nums []int) []int {
    nums = append(nums, 4)
    fmt.Println(nums) // []int{1, 2, 3, 4}
}

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

この例では、addToNumbs 関数内での変更にもかかわらず、元のスライス番号は影響を受けません。この問題を解決するには、代わりにスライスへのポインタを渡すことができます。

func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}
ログイン後にコピー

このアプローチでは、元のスライスが直接変更されることが保証されます。

あるいは、特定のシナリオでは、単純に関数からスライスを変更することは、効率的な解決策になる可能性があります:

func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) {
    // Modification...
    return messages, nil
}
ログイン後にコピー

要約すると、Go でスライスを引数として渡すとき、それは非常に重要です。関数内の変更が元のスライスに影響を与えるかどうかを検討します。その場合、スライスへのポインターを利用するか、変更されたスライスを返すことが、目的の動作を達成するための効果的なアプローチとなります。

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

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