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

青灯夜游
青灯夜游nach vorne
2023-02-14 19:32:304353Durchsuche

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
}

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

[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!

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