ホームページ >バックエンド開発 >Golang >Go の構造体セッターは値渡しと参照渡しをどのように処理しますか?

Go の構造体セッターは値渡しと参照渡しをどのように処理しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 14:29:15495ブラウズ

How Do Go's Struct Setters Handle Pass-by-Value vs. Pass-by-Reference?

Go の構造体セッターを理解する

Go では、構造体を参照または値によって関数に渡すことができます。参照によって渡される場合、関数は元の構造体を変更できます。ただし、構造体を値で渡すと、関数内で構造体の新しいコピーが作成され、このコピーに変更を加えても、元の構造体は変更されません。

提供されたコード例:

type T struct { Val string }

構造体 T には Val という名前の単一の文字列フィールドが含まれています。

func (t T) SetVal(s string) {
    t.Val = s
}

SetVal メソッドは値で構造体を受け取りますそして、その Val フィールドを変更しようとします。ただし、この関数は構造体のコピーを操作しているため、これは期待どおりに機能しません。

func (t *T) SetVal2(s string) {
    (*t).Val = s
}

一方、SetVal2 メソッドは構造体へのポインターを受け取るため、元の構造体を変更できます。構造体。これは、Go が動的にポインタの型をチェックし、関数が基になる構造体にアクセスしてそのフィールドを直接変更できるようにするためです。

要約すると、値によって渡された構造体は新しいコピーを作成し、何も行われないようにすることを理解することが重要です。関数内で行われた変更が元の構造体に影響を与えないようにします。関数内から元の構造体を変更するには、ポインターを使用して参照によって渡す必要があります。

以上がGo の構造体セッターは値渡しと参照渡しをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。