2017-05-03 94 views
1

在我的一个golang项目中,我去模拟os.FileInfo作为测试用例。os.FileInfo模拟不匹配

我不知道我是否正确理解golang的接口处理。 据我所知,下面的一段代码应该可以工作,但是我得到一个Compilererror,说该接口不匹配。

我修改了this go-doc例子,如果你想自己测试一下。

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()) 
    } 
} 

在golang文档之后,该ioutil.ReadDir(".")应返回os.FileInfo片应该是我selfwritten file接口的专业化。

任何人都可以帮助我摆脱这种地狱般的误解和纠缠吗?

非常感谢你们!

+1

这就是https://golang.org/doc/faq#convert_slice_of_interface谈到的内容。问题是切片而不是界面。 – Volker

+1

结帐http://stackoverflow.com/a/12754757/859353 – jcbwlkr

回答

0

os.FileInfo是接口,它可以转换为file。但是,您尝试将[]os.FileInfo转换为[]file。 Slice不是接口,不能被声明。