【发布时间】:2018-01-30 14:30:08
【问题描述】:
现在我已经实现了这个接口的结构,如下所示
type MyRunner struct {
path string
}
func (r MyRunner) soSomthing(newPath string) error {
run(path)
return nil
}
现在我想创建对象,但出现错误 MyRunner 文字中未导出字段“路径”的隐式分配
我就是这样做的
&run.MyRunnter{”a/b/c/“}
有没有办法在 Go 中不使用 New 关键字?
【问题讨论】:
-
您正在尝试访问(设置、获取、无关紧要)另一个包中未导出的字段。即使您尝试使用复合文字来初始化它,编译器也不会让您这样做。
-
@Marc - 好的,但我试图初始化对象为什么它不工作,我需要它......
-
因为这与
run.MyRunner{path:"a/b/c"}相同,所以您仍在访问来自另一个包的未导出字段。如果你想初始化你的对象,你可以在同一个包中有一个助手:func NewRunner(p string) *Runner { return &Runner{path: p} },或者只是导出字段。 -
@Marc - 非常感谢,首选哪种方式?
-
这最终取决于是否应该从包外部使用此字段。如果您不在乎,请将其导出。