在另一个文件中调用函数

我不知道如何在另一个文件中使用函数。


我的项目架构:


.

├── main.go

└── src

    └── function.go


1 directory, 2 files

main.go


package main


import "src/funcrion"


func main() {

    funcrion.Display();

}

函数.go


package src


import "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 有包管理器?


宝慕林4294392
浏览 186回答 2
2回答

子衿沉夜

我相信包名称是src,但我看到你正在尝试导入src\funcrion没有这样的包称为funcrion.我认为你应该做这样的事情 main.gopackage mainimport "src"func main() {    src.Display();}或者如果您想将您的 src 包称为 funcrion,则只需像下面这样导入它,import funcrion "src"并确保您的文件结构如下所示并且在 $GOPATH 内Users└── clementbolin    └── go        └── src            ├── main.go            └── src                └── function.go

慕姐4208626

当您执行import "src/funcrion"此操作时,go 编译器将尝试在 GOPATH 和 GOROOT 中搜索它,正如您在错误消息中看到的那样。它不会尝试在当前文件夹中搜索。由于它在 GOPATH 或 GOROOT 中都找不到具有该名称的包,因此它会给您该错误。引用“当前文件夹”的一个好方法是使用 go 模块。在项目的根目录上执行$ go mod init myproject. (将 myproject 替换为更适合您的项目的名称)完成此操作后,您可以使用“myproject”在包名称中引用项目文件夹,例如:package mainimport "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()读取为“显示一些文本”,这对于函数正在执行的操作更准确和更有意义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go