Heim > Backend-Entwicklung > Golang > So greifen Sie auf eine eingebettete Struktur in einem Zeiger-Slice-Feld einer Struktur zu

So greifen Sie auf eine eingebettete Struktur in einem Zeiger-Slice-Feld einer Struktur zu

WBOY
Freigeben: 2024-02-09 08:27:51
nach vorne
375 Leute haben es durchsucht

So greifen Sie auf eine eingebettete Struktur in einem Zeiger-Slice-Feld einer Struktur zu

Der PHP-Editor zeigt Ihnen, wie Sie im Zeiger-Slice-Feld der Struktur auf die eingebettete Struktur zugreifen. In der Go-Sprache können wir Zeiger-Slices verwenden, um Strukturdaten zu speichern und andere Strukturen als Felder in die Struktur einzubetten. Der Zugriff auf eingebettete Strukturfelder erfordert jedoch einige spezielle Vorgänge. In diesem Artikel wird ausführlich erläutert, wie Sie über Pointer-Slicing auf diese eingebetteten Strukturfelder zugreifen, damit Sie diese Funktion besser verstehen und anwenden können. Unabhängig davon, ob Sie Anfänger oder erfahrener Go-Entwickler sind, erhalten Sie in diesem Artikel praktische Tipps und Beispielcode, mit denen Sie sich dieses Wissen leicht aneignen können.

Frageninhalt

Ich möchte Funktionen hinzufügen, um das erste Element zu erhalten, wenn die Daten []*struct sind.

func getencfields(t reflect.type, list map[string]int) {
    for t.kind() == reflect.ptr {
        t = t.elem()
    }
    if t.kind() == reflect.struct {
        for i := 0; i < t.numfield(); i++ {
            field := t.field(i)
            tag := field.tag.get("bson")
            if containstag(tag, "encr") {
                list[getfieldname(field, tag)]++
            }
            getencfields(field.type, list)
        }
    }
Nach dem Login kopieren

In diesem Code muss ich Funktionen hinzufügen, wenn die Daten []*struct sind. Dies ist der Strukturtyp, der in dieser Funktion übergeben werden soll.

type Customer struct {
    Name     string    `json:"name" bson:"name"`
    Acnumber int64     `json:"acnumber" bson:"acnumber,encr"`
    Number   int64     `json:"number" bson:"number,encr"`
    Address  []*Address `json:"address" bson:"address"`
}
type Address struct {
    Mail string `json:"mail" bson:"mail,encr"`
}
Nach dem Login kopieren

Vielen Dank für Ihre Unterstützung

Problemumgehung

Drillen Sie in Arrays, Slices und Karten, genau wie bei Zeigern.

func getEncFields(t reflect.Type, list map[string]int) {
    for t.Kind() == reflect.Ptr || t.Kind() == reflect.Slice || t.Kind() == reflect.Array || t.Kind() == reflect.Map {
        t = t.Elem()
    }
    if t.Kind() == reflect.Struct {
        for i := 0; i < t.NumField(); i++ {
            field := t.Field(i)
            tag := field.Tag.Get("bson")
            if containsTag(tag, "encr") {
                list[getFieldName(field, tag)]++
            }
            getEncFields(field.Type, list)
        }
    }
}
Nach dem Login kopieren

//m.sbmmt.com/link/b4572f47b7c69e27b8e46646d9579e67 p>

Das obige ist der detaillierte Inhalt vonSo greifen Sie auf eine eingebettete Struktur in einem Zeiger-Slice-Feld einer Struktur zu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.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