没有看到结构Golang的公共功能

时间:2019-05-22 15:33:40

标签: go

我没有看到我定义的结构的公共方法。 有人可以让我明白为什么吗? 这是代码:

// 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()函数。但是,我无法调用此方法。为什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

那不是方法,而只是一个函数。

导入DataStorage(应将其小写),然后可以调用DataStorage.PrintStr()

答案 1 :(得分:0)

我为此玩了一会儿,需要注意以下几点:

  1. 确保相对于GOPATH正确导入软件包,例如

    导入“ github.com/some-repo/datastorage”

并确保您的程序包/存储库位于您的GOPATH和正确的目录中(执行此操作非常麻烦)

  1. 使用包名称引用您的函数,如下所示:

    func main(){     DataStorage.PrintStr() }

另一种说法是正确的,因为go约定是将程序包名称保留为小写。

答案 2 :(得分:0)

您似乎还没有方法接收器的概念。您的struct方法应定义如下:

func (this DataSaver)PrintStr() {
   fmt.Println("hello")
}

func (this *DataSaver)PrintStr() {
   fmt.Println("hello")
}

选择哪种方法取决于您是否要在指针上调用该方法;