自分でその場で定義したinterfaceにcastすることによって、Rubyの `respond_to?` 相当の処理をする。

自分でその場で定義したinterfaceにcastすることによって、Rubyの `respond_to?` 相当の処理をする。

https://github.com/stretchr/testify の実装にたまたまjumpしたらそういう例が見えた。
assertions.go
Copied!
if h, ok := t.(tHelper); ok {
h.Helper()
}
tHelper は同ファイルの下で定義していて
def.go
Copied!
type tHelper interface {
Helper()
}
ここで最初の t t TestingT で、since 1.9のHelperがあれば呼んでおく みたいなことを要するにここではしてる。

既存のライブラリにある型にcastしてみてokなら専用処理をする みたいな例はよく見るけど、その場で独自のinterface定義作ってcastを試みて、成功したら呼ぶ みたいな respond_to? 相当のことをする みたいな例は初めて見たのでおもしろかった。

Powered by Helpfeel