Ich habe eine Struktur, die wie folgt aussieht:Wie kann ich Schnittstellen verwenden, um mehr als 1 Strukturtyp zu ermöglichen, um Code brauchbarer zu machen?
type BetaKey struct {
Id int64 `json:"-"`
IssuerId int64 `json:"-" db:"issuer_id"`
SubjectEmail string `json:"-" db:"subject_email"`
IssuedTime int64 `json:"-" db:"issued_time"`
ExpiryTime int64 `json:"expiryTime" db:"expiry_time"`
Betakey string `json:"accessKey"`
Description string `json:"description"`
}
Und im gleichen Paket habe ich eine Funktion, die ein Stück BetaKey
zurückgibt:
func buildResults(query string) ([]BetaKey, error) {
results := []BetaKey{}
rows, err := sql.DB.Queryx(query)
if err != nil {
return results, err
}
defer rows.Close()
for rows.Next() {
var bk BetaKey
err := rows.StructScan(&bk)
if err != nil {
return results, err
}
results = append(results, bk)
}
err = rows.Err()
if err != nil {
return results, err
}
return results, nil
}
Ist es möglich für mich, diese Funktion zu überschreiben so dass es eine Abfragezeichenfolge aber auch eine Art von BetaKey
als interface{}
einnimmt und ein Stück interface{}
zurückgibt, damit ich den Code anstelle des Kopierens verwenden kann, das dieses in jedes Paket einfügt, weil es buchstäblich das selbe ist aber der einzige Unterschied ist das Name von t er struct das ändert sich.
Ist das möglich? Und ist das auch ratsam? Wenn nicht, warum?
Ja, es ist möglich. Lernen Sie etwas über das Nachdenken über Golang. – Apin
Ich weiß, wie man den Namen der Struktur mit Reflektion bekommt. Und ich weiß, dass ich die Schnittstelle mit Syntax (Typ) konvertieren kann. Aber ich weiß immer noch nicht, wie ich die obige Funktion umschreiben soll. – Alex