未定义的:函数(在另一个包中声明)

5

我的项目组织结构如下:

  • GOPATH
    • src
      • cvs/user/project
        • 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

我不知道我做错了什么。任何建议都将有所帮助,谢谢您提前的支持!
4个回答

10

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

utils.UtilsDoSomething()

如果您使用了utils前缀,也可以在名称中删除Utils

utils.DoSomething()

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

import . "cvs/user/project/utils"

之后,您可以直接使用DoSomething


谢谢你的回答! - Xys

1
在Go语言中,以小写字母开头的符号(包括函数名)不会被导出,因此对其他包不可见。将该函数重命名为UtilsDoSomething
如果您强烈反对导出此函数且使用的是Go 1.5或更高版本,则可以通过将utils目录放置在internal目录中,使该函数仅对您的项目可见。 内部包规范

1
当您从一个包中引用函数时,需要使用包名.函数名(大写)进行引用。
在您的情况下,请使用以下方式: utils.UtilsDoSomething()

0

在 utils 包中,函数名也需要大写

func UtilsDoSomething()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接