golang でリフレクションを使用してプライベート フィールドとメソッドにアクセスする方法

王林
リリース: 2024-05-03 12:15:01
オリジナル
660 人が閲覧しました

リフレクションを使用して、Go 言語のプライベート フィールドおよびメソッドにアクセスできます。プライベート フィールドにアクセスします。reflect.ValueOf() を通じて値のリフレクション値を取得し、FieldByName() を使用してフィールドのリフレクション値を取得します。 String() メソッドを呼び出して、フィールドの値を出力します。プライベート メソッドを呼び出します。また、reflect.ValueOf() を通じて値のリフレクション値を取得し、次に MethodByName() を使用してメソッドのリフレクション値を取得し、最後に Call() メソッドを呼び出してメソッドを実行します。実際のケース: プライベート フィールドの値を変更し、リフレクションを通じてプライベート メソッドを呼び出して、オブジェクト コントロールと単体テスト カバレッジを実現します。

golang 如何使用反射访问私有字段和方法

リフレクションを使用して Go のプライベート フィールドとメソッドにアクセスする

リフレクションは、プログラムが他のプロパティのプロパティを検査および操作できるようにする高級言語機能です。実行時のオブジェクトと動作。 Go 言語では、リフレクション パッケージは、プライベート フィールドやメソッドにアクセスして変更できる豊富な API を提供します。

プライベート フィールドへのアクセス

import ( "reflect" ) type StructWithPrivateField struct { somePrivateField string } func main() { v := reflect.ValueOf(StructWithPrivateField{}) field := v.FieldByName("somePrivateField") println(field.String()) // 输出: "" }
ログイン後にコピー

上記のコードでは、reflect.ValueOf()を使用して、StructWithPrivateField値のリフレクション値を取得します。次にFieldByName()メソッドを使用して、プライベート フィールドsomePrivateFieldの反映された値を取得します。最後に、String()メソッドを使用してフィールドの値を出力します。

プライベート メソッドの呼び出し

import ( "reflect" ) type StructWithPrivateMethod struct { somePrivateMethod func() } func main() { v := reflect.ValueOf(StructWithPrivateMethod{}) method := v.MethodByName("somePrivateMethod") method.Call(nil) // 调用方法 }
ログイン後にコピー

プライベート フィールドへのアクセスと同様に、MethodByName()メソッドを使用してプライベート メソッドsomePrivateMethod# のリフレクション値を取得できます。 ##。次に、Call()メソッドを呼び出すことで、プライベート メソッドを実行できます。

実践的なケース

次に、リフレクションを使用してプライベート フィールドとメソッドにアクセスする実践的なケースを示します。

import ( "reflect" "testing" ) type Account struct { name string balance float64 } func (acc *Account) Deposit(amount float64) { acc.balance += amount } func (acc *Account) GetBalance() float64 { return acc.balance } func TestAccount(t *testing.T) { acc := &Account{name: "Test account"} v := reflect.ValueOf(acc) // 设置私有字段值 balanceField := v.FieldByName("balance") balanceField.SetFloat(1000.00) // 调用私有方法 depositMethod := v.MethodByName("Deposit") depositMethod.Call([]reflect.Value{reflect.ValueOf(500.00)}) balance := acc.GetBalance() if balance != 1500.00 { t.Errorf("Expected balance to be 1500, got %f", balance) } }
ログイン後にコピー

TestAccountテスト関数では、次を使用します。リフレクション プライベート フィールドbalanceの値を変更し、プライベート メソッドDeposit()を呼び出します。このようにして、オブジェクトの状態を制御し、その動作を検証し、強力な単体テスト カバレッジを達成できます。

以上がgolang でリフレクションを使用してプライベート フィールドとメソッドにアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!