为了账号安全,请及时绑定邮箱和手机立即绑定

在另一个文件中调用函数

在另一个文件中调用函数

Go
宝慕林4294392 2022-06-27 11:12:02
我不知道如何在另一个文件中使用函数。我的项目架构:.├── main.go└── src    └── function.go1 directory, 2 filesmain.gopackage mainimport "src/funcrion"func main() {    funcrion.Display();}函数.gopackage srcimport "fmt";func Display() {    fmt.Println("Hello World");}为了开始我的项目,我使用:go run main.go错误:main.go:3:8: cannot find package "src/funcrion" in any of:    /usr/local/opt/go/libexec/src/src/funcrion (from $GOROOT)    /Users/clementbolin/go/src/src/funcrion (from $GOPATH)首先,我想解决这个问题。第二次我想知道编译一个包含更多 10 个文件的真实项目的最佳选择是什么,我需要使用 Makefile 吗?或者像 Rust 中的 go 有包管理器?
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我相信包名称是src,但我看到你正在尝试导入src\funcrion没有这样的包称为funcrion.


我认为你应该做这样的事情 main.go


package main


import "src"


func main() {

    src.Display();

}

或者如果您想将您的 src 包称为 funcrion,则只需像下面这样导入它,


import funcrion "src"


并确保您的文件结构如下所示并且在 $GOPATH 内


Users

└── clementbolin

    └── go

        └── src

            ├── main.go

            └── src

                └── function.go


查看完整回答
反对 回复 2022-06-27
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

当您执行import "src/funcrion"此操作时,go 编译器将尝试在 GOPATH 和 GOROOT 中搜索它,正如您在错误消息中看到的那样。它不会尝试在当前文件夹中搜索。由于它在 GOPATH 或 GOROOT 中都找不到具有该名称的包,因此它会给您该错误。


引用“当前文件夹”的一个好方法是使用 go 模块。在项目的根目录上执行$ go mod init myproject. (将 myproject 替换为更适合您的项目的名称)


完成此操作后,您可以使用“myproject”在包名称中引用项目文件夹,例如:


package main


import "myprject/src"


func main() {

    src.Display();

}

另请注意,导入只到包名而不是文件名。所以,在你的情况下,你不应该import myproject/src/function仅仅因为你在一个包中有一个function.go文件。src


而且由于您的Display函数在src包内,因此您只需src.Display()在导入包后引用它。无需在任何地方指定文件名。


您可以在此处阅读有关 go 模块的更多信息:https ://blog.golang.org/using-go-modules


另一个提示是不要src用作包名。在 Go 中,通常没有“src”文件夹,并且作为包名也不是很好。例如,请参阅读取的行src.Display()。本能地,我会将其解读为“源头的展示”之类的东西,没有任何意义。但是,如果不是src您命名您的 package text,而是将同一行text.Display()读取为“显示一些文本”,这对于函数正在执行的操作更准确和更有意义。


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号