我已经method
想要提供一些界面以使其更易于测试
这是功能
文件A
func readFile(s source) ([]byte, error) {
p := fs.GetPath()
file, err := ioutil.ReadFile(p + "/" + s.path + "/" + "rts.yaml")
if err != nil {
return yamlFile, fmt.Errorf("erro reading file : %s", err.Error())
}
return file, err
}
现在我为其添加struct
type source struct{
path string
}
readFile
是implementing
的界面
type fileReader interface {
readFile(path string) ([]byte, error)
}
现在我需要从另一个文件调用此函数,但是我在执行此操作时出错
文件B
type source struct {
path string
}
a := source{}
yamlFile, err := readFile(a)
我在这里想念什么?
答案 0 :(得分:1)
将包含source
结构的包导入File A
中,然后在将变量传递给readFile
函数之后,使用该结构初始化变量。
文件B
import A
a := A.Source{}
因为文件A中的source
结构与文件B中的source
结构不同。文件A的source
结构正在实现接口,因此您需要导入源结构并然后将其传递给函数。
请注意,要使任何结构或函数可导出,都应以大写字母开头结构或功能名称。
文件A
// make struct exportable
type Source struct{
path string
}
实现了与
不同的界面文件B
type source struct{
path string
}
未实现该接口。
已编辑
文件A
package main
import (
"fmt"
"io/ioutil"
"os"
)
type Source struct {
Path string
}
type fileReader interface {
readOneFile() ([]byte, error)
}
func(s Source) readOneFile() ([]byte, error) {
cwd, err := os.Getwd()
file, err := ioutil.ReadFile(fmt.Sprintf("%s/file.txt", cwd))
if err != nil {
return nil, fmt.Errorf("erro reading file : %s", err.Error())
}
return file, err
}
文件B
package main
import (
"fmt"
)
func main() {
s := Source{}
data, err := s.readOneFile()
if err != nil {
fmt.Errorf("Error in reading the file")
}
fmt.Println(string(data))
}