2017-05-03 95 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不是接口,不能被聲明。