私は彼らの基盤とその上に構築されたバリアントとしてベース構造体を持つ構造体のセットを構築しようとしてきました。しかし、共通コードが基本構造体にあるときに構造体がそれ自身を識別する方法はないように見えます。私はこれをどのようにしなければならないのですか?ゴランのアイデンティティ比較?
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!
}
だけ明確にするために、私はこれを追加することができます知っている: FUNC(B *ブロック2)ISME(その他ベース)BOOL { リターンB ==他の } と私は、正しい結果を取得します。しかし、私はすべてのサブ構造体に同じボイラープレートコードを書いてはいけません。 –
http://stackoverflow.com/questions/35546054/golang-equivalent-of-is-operator-in-python – IanAuld
おかげで@IanAuldが、そのリンクは、この特定の問題に関連していないようです。関与するインタフェースがあることに注意してください。サイドノートで –