2017-05-03 4 views
1

in einem meiner Golang-Projekte ging ich die os.FileInfo für Testfälle spotten.os.FileInfo Schein nicht passend

Ich bin mir nicht sicher, ob ich das Interface-Handling von Golang richtig verstehe. So weit ich weiß, sollte das folgende Stück Code funktionieren, aber ich bekomme einen Compilererror, der sagt, dass die Schnittstelle nicht übereinstimmt.

Ich modifizierte this go-doc Beispiel ein bisschen für den Fall, dass Sie es selbst testen möchten.

package main 

import (
    "fmt" 
    "io/ioutil" 
    "log" 
) 

type file interface{ 
    Name() string 
} 

func readFiles() []file{ 
    files, err := ioutil.ReadDir(".") 

    if err != nil { 
     log.Fatal(err) 
    } 

    return files 
} 

func main() { 
    files := readFiles() 

    for _, file := range files { 
     fmt.Println(file.Name()) 
    } 
} 

am golang doc Nach sollte die ioutil.ReadDir(".") eine Scheibe os.FileInfo Rückkehr, die eine Spezialisierung meiner selbstgeschriebenen file Schnittstelle sein sollte.

Kann mir bitte jemand aus dieser Hölle von Missverständnissen und Verwicklungen helfen?

Vielen Dank Jungs!

+1

Das spricht https://golang.org/doc/faq#convert_slice_of_interface. Das Problem ist die Scheibe und nicht die Schnittstelle. – Volker

+1

Überprüfen Sie http://stackoverflow.com/a/12754757/859353 – jcbwlkr

Antwort

0

os.FileInfo ist Schnittstelle und kann in file umgewandelt werden. Aber Sie versuchen, []os.FileInfo zu []file zu konvertieren. Slice ist keine Schnittstelle und kann nicht aktiviert werden.