Чтобы быть более конкретным:
У меня есть 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.
}