Trong đoạn lệnh dưới đây thì ev, ok := ev.(*types.DuplicateVoteEvidence)
có nghĩa là gì nhỉ? Nó là gọi hàm hay là gì nhỉ?
type Evidence interface { ABCI() []abci.Evidence // forms individual evidence to be sent to the application Bytes() []byte // bytes which comprise the evidence Hash() []byte // hash of the evidence Height() int64 // height of the infraction String() string // string format of the evidence Time() time.Time // time of the infraction ValidateBasic() error // basic consistency check } type DuplicateVoteEvidence struct { VoteA *Vote `json:"vote_a"` VoteB *Vote `json:"vote_b"` // abci specific information TotalVotingPower int64 ValidatorPower int64 Timestamp time.Time } evidenceFromEachValidator := make([]types.Evidence, nValidators) // set giá trị cho evidenceFromEachValidator for idx, ev := range evidenceFromEachValidator { ev, ok := ev.(*types.DuplicateVoteEvidence) }
có nghĩa là cast biến `ev` sang kiểu `*types.DuplicateVoteEvidence`, nếu không cast được thì biến `ok` sẽ trả về false, ngược lại sẽ là true và biến ev sẽ được đổi sang kiểu `*types.DuplicateVoteEvidence`
Nhưng nhìn trong ví dụ thì DuplicateVoteEvidence và Evidence không có sự liên hệ nào với nhau, có vẻ như việc ép kiểu này luôn sai?
Trường hợp như thế này thì sẽ cast được