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)

藏色散人
Freigeben: 2022-11-28 20:41:04
nach vorne
5943 Leute haben es durchsucht

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
}
Nach dem Login kopieren

Interface-Assertion-Beurteilung:

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

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")
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage