我没有看到我定义的结构的公共方法。 有人可以让我明白为什么吗? 这是代码:
// DataSaver.go:
package DataStorage
import (
"fmt"
"os"
)
type DataSaver struct {
// doesn't relevant to my question
fileName string
file *os.File
}
func PrintStr() {
fmt.Println("hello")
}
然后,我在其他课程中有一个主要方法。我初始化了该结构,并想调用PrintStr()函数。但是,我无法调用此方法。为什么?
谢谢!
答案 0 :(得分:2)
那不是方法,而只是一个函数。
导入DataStorage(应将其小写),然后可以调用DataStorage.PrintStr()
答案 1 :(得分:0)
我为此玩了一会儿,需要注意以下几点:
确保相对于GOPATH正确导入软件包,例如
导入“ github.com/some-repo/datastorage”
并确保您的程序包/存储库位于您的GOPATH和正确的目录中(执行此操作非常麻烦)
使用包名称引用您的函数,如下所示:
func main(){ DataStorage.PrintStr() }
另一种说法是正确的,因为go约定是将程序包名称保留为小写。
答案 2 :(得分:0)
您似乎还没有方法接收器的概念。您的struct方法应定义如下:
func (this DataSaver)PrintStr() {
fmt.Println("hello")
}
或
func (this *DataSaver)PrintStr() {
fmt.Println("hello")
}
选择哪种方法取决于您是否要在指针上调用该方法;