Golang中如何从另一个文件导入函数
Golang中如何从另一个文件导入函数 如果这个问题太基础了,我很抱歉。我昨天才开始学习Go。
我正在尝试从另一个文件导入一个函数,但控制台报错说该函数未定义。我搞不明白哪里做错了。
我已将其推送到我的GitHub仓库以便查看:alkapwn3d/vending-machine-go
哎呀。我早该知道的,不过这样说得通。 非常感谢您,善良的先生。
更多关于Golang中如何从另一个文件导入函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
- 将此文件保存在您想要使用该函数的文件所在的同一目录中。如果它位于不同的目录中,您需要相应地调整导入路径。
“go run vending-machine.go” 只会编译那一个文件。而“go run .”则会编译并运行该目录下的所有 .go 源文件。
go help run
Run 编译并运行指定的主 Go 包。 通常,该包被指定为来自单个目录的 .go 源文件列表,但它也可以是导入路径、文件系统路径或匹配单个已知包的模式,例如 ‘go run .’ 或 ‘go run my/cmd’。
// 代码示例应放在这里,但原文未提供具体代码。
// 如果存在Go代码,将用```go包裹。
在Go中,从另一个文件导入函数的关键在于包(package) 的声明。所有在同一个包(即同一个目录下,且package声明相同)中的文件,它们的函数、变量等是共享的,无需显式导入。
查看你的仓库,问题在于文件结构。你的main.go和vending_machine.go文件都声明为package main,这没错,但你需要确保它们在同一目录下,并且正确引用了彼此。
在你的main.go中,你试图调用vending_machine.go中的DisplayItems函数。根据你的代码,正确的做法应该是:
1. 检查包声明: 两个文件的第一行都应该是:
package main
2. 在main.go中直接调用:
由于它们在同一个包中,你可以直接调用DisplayItems,就像调用同一个文件中的函数一样。
示例:
vending_machine.go:
package main
import "fmt"
func DisplayItems() {
items := map[string]float64{
"Pepsi": 3.99,
"Coke": 3.99,
"Water": 1.50,
"Juice": 4.50,
}
fmt.Println("=== Vending Machine Items ===")
for item, price := range items {
fmt.Printf("%s: $%.2f\n", item, price)
}
}
main.go:
package main
func main() {
// 直接调用,无需导入
DisplayItems()
}
3. 编译运行: 在包含这两个文件的目录下,运行:
go run main.go vending_machine.go
或者
go run .
关键点:
- Go没有像Python那样的
import语句来导入单个文件 - 同一个包内的所有文件共享作用域
- 使用
go run时指定所有相关文件,或使用go build编译整个包
你的错误可能是因为:
- 只运行了
go run main.go而没有包含vending_machine.go - 文件不在同一目录
- 包声明不一致
检查后重新运行即可解决。

