Ich kämpfe mit meinem Lernen von Go.Kann ich in Golang einen Alias eines Typs erstellen?
fand ich diese saubere Implementierung eines Sets in go: gopkg.in/fatih/set.v0, aber ich würde meine Sets mit einem eindeutigen Namen, dass set.Set
, etwas zu tun, wie es vorziehen, Benennung:
type View set.Set
Im Grunde möchte ich meine View
Typ zu erben set.Set
Methoden. Denn, nun, View
ist einset.Set
Deskriptoren. Aber ich weiß, Go ist ziemlich pikant auf Vererbung und Tippen im Allgemeinen.
Denn jetzt habe ich versucht, die folgende irgendwie Vererbung, aber es ist eine Menge Fehler verursachen, wenn einige Funktionen wie func Union(set1, set2 Interface, sets ...Interface) Interface
oder func (s *Set) Merge(t Interface)
zu verwenden versuchen:
type View struct {
set.Set
}
würde ich, wenn wissen, es gibt ein Weg, um das zu erreichen, was ich auf eine Go-ähnliche Weise erreichen möchte, oder wenn ich nur versuche, meine guten alten OO-Praktiken auf eine Sprache anzuwenden, die sie ablegt, bitte.
Versuchen Sie nicht zu schreiben Go wie OO-Sprachen mit Vererbung. Es gibt keine Vererbung, also wirst du nur mehr Verwirrung erzeugen. Wenn Sie Methoden und Felder automatisch delegieren möchten, können Sie die Einbettung wie in Ihrem zweiten Beispiel verwenden. Das ist in Ordnung, aber denken Sie daran, dass dies nur eine Form der Komposition ist. – JimB
Also, Ihr Rat verwendet das Original-Set.Set Typ wie ist?Da die Verwendung von Set-Funktionen mit dem eingebetteten Typ so umständlich ist? Es ist nicht so schlimm, ich bin gerade in die Erbschaft getaucht, bevor ich darüber nachgedacht habe, was ich getan habe. –
Wenn Sie interessiert sind, gibt es hier einen guten Artikel zum Thema von William Kennedy: https://www.goinggo.net/2016/10/reducing-type-hierarchies.html – thoeni