英文:
undefined: function (declared in another package)
问题
你的项目组织结构如下:
- GOPATH
- src
- cvs/user/project
- main.go
- utils
- utils.go
- cvs/user/project
- src
main.go的代码如下:
package main
import (
"fmt"
"cvs/user/project/utils"
)
func main() {
...
utilsDoSomething()
...
}
而utils.go的代码如下:
package utils
import (
"fmt"
)
func utilsDoSomething() {
...
}
编译器告诉我:
main.go导入但未使用:"cvs/user/project/utils"
main.go未定义:utilsDoSomething
我不知道我做错了什么。有任何想法都会有帮助,提前谢谢!
英文:
my project organisation looks like this :
- GOPATH
- src
- cvs/user/project
- main.go
- utils
- utils.go
- cvs/user/project
- src
main.go looks like this :
package main
import (
"fmt"
"cvs/user/project/utils"
)
func main() {
...
utilsDoSomething()
...
}
and utils.go :
package utils
import (
"fmt"
)
func utilsDoSomething() {
...
}
The compiler tells me that :
main.go imported and not used: "cvs/user/project/utils"
main.go undefined: utilsDoSomething
I don't know what I'm doing wrong. Any idea would be helpful, thank you in advance !
答案1
得分: 10
你在main.go
中忘记了包前缀,并且你的函数没有被导出,这意味着它无法从其他包中访问。要导出一个标识符,可以在名称开头使用大写字母:
utils.UtilsDoSomething()
一旦你有了utils
前缀,你也可以在名称中省略Utils
:
utils.DoSomething()
如果你想将utils
包中的所有内容导入到主应用程序的命名空间中,可以使用以下代码:
import . "cvs/user/project/utils"
之后你就可以直接使用DoSomething
了。
英文:
You forgot the package prefix in main.go
and your function is not exported, meaning it is not accessible from other packages. To export an identifier, use a capital letter at the beginning of the name:
utils.UtilsDoSomething()
Once you have the utils
prefix you can also drop the Utils
in the name:
utils.DoSomething()
If you want to import everything from the utils
package into the namespace of your main application do:
import . "cvs/user/project/utils"
After that you can use DoSomething
directly.
答案2
得分: 1
在Go语言中,以小写字母开头的符号(包括函数名)不会被导出,因此对其他包不可见。
将该函数重命名为UtilsDoSomething
。
如果你强烈反对导出该函数,并且你使用的是Go 1.5或更高版本,你可以通过将utils
目录放在internal
目录中,使该函数只对你的项目可见。
英文:
In Go the symbols (including function names) starting with lower case letters are not exported and so are not visible to other packages.
Rename the function to UtilsDoSomething
.
If you strongly oppose exporting this function and you are using Go 1.5 or later, you can make your function visible to only your project by placing utils
directory inside internal
directory.
答案3
得分: 1
当你引用一个包中的函数时,你需要使用包名.函数名
的形式来引用(首字母大写)。
在你的情况下,使用如下方式:
utils.UtilsDoSomething()
。
英文:
When you are referencing a function from a package you need to reference it using the package name.Function name
(with capital case).
In your case use it as:
utils.UtilsDoSomething()
.
答案4
得分: 0
在包utils中,函数名也需要大写。
func UtilsDoSomething()
英文:
function name also needs to be capitalized in the package utils
func UtilsDoSomething()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论