Heim > Backend-Entwicklung > Golang > Wie bestimmt die Go-Sprache, ob eine bestimmte Methode in einer Struktur vorhanden ist? Zwei Möglichkeiten zur Einführung

Wie bestimmt die Go-Sprache, ob eine bestimmte Methode in einer Struktur vorhanden ist? Zwei Möglichkeiten zur Einführung

青灯夜游
Freigeben: 2023-02-21 19:44:16
nach vorne
4372 Leute haben es durchsucht

Wie kann man feststellen, ob eine Methode in einer Struktur in der Go-Sprache vorhanden ist? Der folgende Artikel stellt Ihnen zwei Möglichkeiten in Golang vor, um festzustellen, ob eine Methode in einer Struktur vorhanden ist (mit Codebeispielen).

Wie bestimmt die Go-Sprache, ob eine bestimmte Methode in einer Struktur vorhanden ist? Zwei Möglichkeiten zur Einführung

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

Ja, obwohl go keine vorgefertigte Methode bereitstellt, ist dies der Fall kann vorhandene Logik verwenden, um die Implementierung zu kapseln.

Derzeit stehen zwei Methoden zur Verfügung: Die eine besteht darin, die vollständige Methode zu kennen und die Schnittstellenbehauptung zur Beurteilung zu verwenden. Die zweite besteht darin, 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

[Empfohlenes Lernen: Video-Tutorial besuchen]

Das obige ist der detaillierte Inhalt vonWie bestimmt die Go-Sprache, ob eine bestimmte Methode in einer Struktur vorhanden ist? Zwei Möglichkeiten zur Einführung. 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