更具体地说:
我有 2 个读者。一个是我从 os.Open("someExistingFile") 得到的,另一个是从 strings.NewReader("hello world") 得到的。
其中一个实现了 Name(),另一个没有。我想让另一个也实现 Name() (例如返回“”)或(首选)仅在实际参数的类型支持时调用 Name() 。
我希望下面的代码片段清楚地表明了我想要解决的问题。
我玩过不同的接收器,即使有反射,但我没有达到目的......
package main
import (
"io"
"os"
"strings"
)
func main() {
stringReader := strings.NewReader("hello world")
fileReader, _ := os.Open("someExistingFile") // error handling omitted
fileReader.Name()
printFilenameIfReaderIsFile(stringReader)
printFilenameIfReaderIsFile(fileReader)
}
func printFilenameIfReaderIsFile(reader io.Reader) {
// here I want to ...
// ... either check if this reader is of type os.File and in this case call its Name() method (preferred)
// ... or use a custom type instead of io.Reader.
// This type's Name() method should return the filename for fileReader and nil for stringReader.
}
ITMISS
相关分类