ホームページ  >  記事  >  バックエンド開発  >  Golang が構造内にメソッドが存在するかどうかを判断する 2 つの方法 (コード例付き)

Golang が構造内にメソッドが存在するかどうかを判断する 2 つの方法 (コード例付き)

藏色散人
藏色散人転載
2022-11-28 16:22:165762ブラウズ

この記事では、Golang について学び、構造に特定のメソッドがあるかどうかを Golang がどのように判断するかについて説明します。

Golang が構造内にメソッドが存在するかどうかを判断する 2 つの方法 (コード例付き)

go 構造に特定のメソッドがあるかどうかを判断する

go 特定の構造に特定のメソッドがあるかどうかを判断する必要がある場合があります。はい、go は既成のメソッドを提供していませんが、既存のロジックを使用してカプセル化して実装することができます。 [推奨される学習:

ビデオ チュートリアルをご覧ください

]現在使用できる方法は 2 つあります。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")

以上がGolang が構造内にメソッドが存在するかどうかを判断する 2 つの方法 (コード例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。