Ich habe versucht, eine Reihe von Strukturen zu erstellen, die eine Basisstruktur als ihre Grundlage und Varianten darauf gebaut haben. Ich habe jedoch herausgefunden, dass es keine Möglichkeit für die Struktur gibt, sich zu identifizieren, wenn sich der gemeinsame Code in der Basisstruktur befindet. Wie soll ich das machen?Identitätsvergleich in Golang?
package main
import (
"fmt"
)
type Base interface {
IsMe(other Base) bool
}
type Block struct {
}
func (b *Block) IsMe(other Base) bool {
return b == other
}
type Block2 struct {
Block
}
func main() {
b1 := &Block{}
b2 := &Block2{}
fmt.Printf("b1.IsMe(b1): %v\n", b1.IsMe(b1))
fmt.Printf("b1.IsMe(b2): %v\n", b1.IsMe(b2))
fmt.Printf("b2.IsMe(b1): %v\n", b2.IsMe(b1)) // Wrong result!
fmt.Printf("b2.IsMe(b2): %v\n", b2.IsMe(b2)) // Wrong result!
}
Nur klar sein, ich weiß, dass ich dies hinzufügen: func (b * Block2) IsMe (andere Basis) bool { return b == andere } und ich werde dann das richtige Ergebnis bekommen. .. Ich möchte jedoch nicht für jede Unterstruktur den gleichen Kode für die Kachelplatte schreiben. –
http://stackoverflow.com/questions/35546054/golang-equivalent-of-is-operator-in-python – IanAuld
Dank @IanAuld, aber dieser Link scheint nicht relevant für dieses spezielle Problem. Beachten Sie, dass eine Schnittstelle beteiligt ist. –