我的项目组织如下:
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
我不知道自己做错了什么。任何想法都会有所帮助,谢谢你!
答案 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
目录中,使您的功能仅对您的项目可见。
答案 2 :(得分:1)
当你从包中引用一个函数时,你需要使用package name.Function name
引用它(有大写情况)。
在您的情况下,请将其用作:
utils.UtilsDoSomething()
。