Go 言語の構造内にメソッドが存在するかどうかを確認するにはどうすればよいですか?次の記事では、構造内に特定のメソッドが存在するかどうかを Golang で判断する 2 つの方法をコード例とともに紹介します。
#go ある構造にあるメソッドがあるかどうかを判断する必要があるとき、突然混乱することがあります。Go は PHPYes のように判断することもできます, go は既製のメソッドを提供していませんが、既存のロジックを使用して実装をカプセル化できます。 現在利用可能な方法は 2 つあり、1 つは完全なメソッドを知っていてインターフェイス アサーションを使用して判断する方法、もう 1 つはリフレクションを使用して判断を完了する方法です。 判定対象となる構造の準備:type RefData struct {} func (this *RefData) Show(data any, name string) string { data2 := data.(string) + "===" + name return data2 }インターフェースアサーション判定:
refDataExists := false var refDataOb any = &RefData{} if _, ok := refDataOb.(interface { Show(any, string) string }); ok { refDataExists = true }リフレクション判定:
import( "reflect" ) // 判断结构体方法是否存在 func MethodExists(in any, method string) bool { if method == "" { return false } p := reflect.TypeOf(in) if p.Kind() == reflect.Pointer { p = p.Elem() } // 不是结构体时 if p.Kind() != reflect.Struct { return false } object := reflect.ValueOf(in) // 获取到方法 newMethod := object.MethodByName(method) if !newMethod.IsValid() { return false } return true } // 使用 refDataExists := MethodExists(&RefData{}, "Show")[推奨学習:
govideo チュートリアル ]
以上がGo 言語は構造内に特定のメソッドが存在するかどうかをどのように判断するのでしょうか? 2つの導入方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。