Heim >Backend-Entwicklung >Golang >Zwei Möglichkeiten für Golang, festzustellen, ob eine Methode in einer Struktur vorhanden ist (mit Codebeispielen)

Zwei Möglichkeiten für Golang, festzustellen, ob eine Methode in einer Struktur vorhanden ist (mit Codebeispielen)

藏色散人
藏色散人nach vorne
2022-11-28 16:22:165881Durchsuche

Dieser Artikel wird Ihnen helfen, Golang zu lernen und darüber zu sprechen, wie Golang bestimmt, ob eine Struktur eine bestimmte Methode hat. Ich hoffe, dass er für alle hilfreich ist.

Zwei Möglichkeiten für Golang, festzustellen, ob eine Methode in einer Struktur vorhanden ist (mit Codebeispielen)

go Bestimmen Sie, ob eine Struktur eine bestimmte Methode hat

go Manchmal müssen Sie beurteilen, ob eine bestimmte Struktur eine bestimmte Methode hat, aber Sie fühlen sich möglicherweise plötzlich verwirrt. Go kann auch wie PHP urteilen

Ja, Obwohl go keine vorgefertigte Methode bereitstellt, können Sie die vorhandene Logik verwenden, um die Implementierung zu kapseln. [Empfohlenes Lernen: Go-Video-Tutorial]

Es gibt derzeit zwei Methoden, die verwendet werden können. Eine besteht darin, die vollständige Methode zu kennen und die Schnittstellenbehauptung zur Beurteilung zu verwenden, und die zweite darin, die Reflexion zu verwenden, um die Beurteilung zu vervollständigen.

Bereiten Sie die Struktur vor, die beurteilt werden muss:

type  RefData  struct  {}

func  (this  *RefData)  Show(data  any,  name  string)  string  {
  data2  :=  data.(string)  +  "==="  +  name

  return  data2
}

Interface-Assertion-Beurteilung:

refDataExists := false
var refDataOb any = &RefData{}
if _, ok := refDataOb.(interface {
    Show(any, string) string
}); ok {
    refDataExists = true
}

Reflexionsbeurteilung:

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")

Das obige ist der detaillierte Inhalt vonZwei Möglichkeiten für Golang, festzustellen, ob eine Methode in einer Struktur vorhanden ist (mit Codebeispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen