ホームページ > バックエンド開発 > Golang > Go 言語は構造内に特定のメソッドが存在するかどうかをどのように判断するのでしょうか? 2つの導入方法

Go 言語は構造内に特定のメソッドが存在するかどうかをどのように判断するのでしょうか? 2つの導入方法

青灯夜游
リリース: 2023-02-21 19:44:16
転載
4364 人が閲覧しました

Go 言語の構造内にメソッドが存在するかどうかを確認するにはどうすればよいですか?次の記事では、構造内に特定のメソッドが存在するかどうかを Golang で判断する 2 つの方法をコード例とともに紹介します。

Go 言語は構造内に特定のメソッドが存在するかどうかをどのように判断するのでしょうか? 2つの導入方法

#go ある構造にあるメソッドがあるかどうかを判断する必要があるとき、突然混乱することがあります。Go は PHP

Yes のように判断することもできます, 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 サイトの他の関連記事を参照してください。

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