【问题标题】:undefined: function (declared in another package)未定义:函数(在另一个包中声明)
【发布时间】:2016-04-29 11:22:51
【问题描述】:

我的项目组织是这样的:

  • GOPATH
      • cvs/用户/项目
        • main.go
        • 实用程序
          • 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

我不知道我做错了什么。任何想法都会有所帮助,在此先感谢您!

【问题讨论】:

    标签: go


    【解决方案1】:

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

    utils.UtilsDoSomething()
    

    拥有utils 前缀后,您还可以在名称中删除Utils

    utils.DoSomething()
    

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

    import . "cvs/user/project/utils"
    

    之后就可以直接使用DoSomething了。

    【讨论】:

    • 感谢您的回答!
    【解决方案2】:

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

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

    utils.UtilsDoSomething().

    【讨论】:

      【解决方案3】:

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

      将函数重命名为UtilsDoSomething

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

      Specification of internal packages

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-13
        • 2012-07-31
        相关资源
        最近更新 更多