Heim >Backend-Entwicklung >Golang >Warum erhalte ich Fehler beim Aufrufen von Methoden für Schnittstellenzeiger in Go?

Warum erhalte ich Fehler beim Aufrufen von Methoden für Schnittstellenzeiger in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-08 22:50:111001Durchsuche

Why Do I Get Errors When Calling Methods on Interface Pointers in Go?

Aufrufen von Methoden für Schnittstellenzeiger in Go

Beim Arbeiten mit der Gorp-Bibliothek für den Datenbankzugriff, die sowohl einen DbMap-Typ als auch einen Transaktionstyp bietet, kann es vorkommen, dass Sie auf Folgendes stoßen: müssen Methoden für Schnittstellenzeiger aufrufen. Dies kann auftreten, wenn Sie während der Verwendung einer Transaktion ein Rollback durchführen müssen.

Um das im Codebeispiel aufgetretene Problem zu beheben, ist es wichtig zu verstehen, dass die Übergabe eines Zeigers an eine Schnittstelle in Go nicht erforderlich ist. Im Gegensatz zu anderen Sprachen verwendet Go keinen Call-by-Reference. Stattdessen ist die Übergabe eines Zeigers nur dann erforderlich, wenn Sie den ursprünglichen Wert innerhalb der Funktion ändern müssen, was bei Schnittstellenwerten normalerweise nicht der Fall ist.

Das Problem besteht darin, dass die Get-Methode der gorp.SqlExecutor-Schnittstelle verwendet wird einen Zeigerwert als ersten Parameter. Ihre Repository-Struktur versucht jedoch, diesem Parameter einen Nicht-Zeigerwert (*gorp.SqlExecutor) zuzuweisen, was zu der Fehlermeldung führt.

Die richtige Lösung dieses Problems besteht darin, den Zeiger auf den Schnittstellenwert zu verwenden direkt im Methodenaufruf. Hier ist der korrigierte Code:

package repositories

import (
    "github.com/coopernurse/gorp"
)

type Repository struct {
    Gorp gorp.SqlExecutor
}

func (r *Repository) GetById(i interface{}, key interface{}) interface{} {
    obj, err := r.Gorp.Get(i, key)
    if err != nil {
        panic(err)
    }
    return obj
}

Durch die direkte Verwendung des Zeigers auf die Schnittstelle ermöglichen Sie der Get-Methode, den ursprünglichen Wert zu ändern, was für das Rollback von Transaktionen erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich Fehler beim Aufrufen von Methoden für Schnittstellenzeiger in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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