undefined:function(在另一个包中声明)

时间:2016-04-29 11:22:52

标签: go

我的项目组织如下:

  • GOPATH
    • SRC
      • CVS /用户/项目
        • main.go
        • utils的
          • utils.go

main.go看起来像这样:

package main

import (
  "fmt"
  "cvs/user/project/utils"
)

func main() {
   ...
   utilsDoSomething()
   ...
}

和utils.go:

package utils

import (
  "fmt"
)   

func utilsDoSomething() {
    ...
}

编译器告诉我:

main.go imported and not used: "cvs/user/project/utils"

main.go undefined: utilsDoSomething

我不知道自己做错了什么。任何想法都会有所帮助,谢谢你!

3 个答案:

答案 0 :(得分:9)

您忘记了main.go中的包前缀,而且您的功能不是exported,这意味着无法从其他包中访问它。要导出标识符,请在名称的开头使用大写字母:

utils.UtilsDoSomething()

获得utils前缀后,您还可以删除名称中的Utils

utils.DoSomething()

如果要将utils包中的所有内容导入到主应用程序的命名空间中,请执行以下操作:

import . "cvs/user/project/utils"

之后,您可以直接使用DoSomething

答案 1 :(得分:1)

在Go中,不会导出以小写字母开头的符号(包括函数名称),因此其他包不可见。

将该功能重命名为UtilsDoSomething

如果您强烈反对导出此功能并且使用的是Go 1.5或更高版本,则可以通过将utils目录放在internal目录中,使您的功能仅对您的项目可见。

Specification of internal packages

答案 2 :(得分:1)

当你从包中引用一个函数时,你需要使用package name.Function name引用它(有大写情况)。

在您的情况下,请将其用作:

utils.UtilsDoSomething()