Golang中如何从另一个文件导入函数

Golang中如何从另一个文件导入函数 如果这个问题太基础了,我很抱歉。我昨天才开始学习Go。

我正在尝试从另一个文件导入一个函数,但控制台报错说该函数未定义。我搞不明白哪里做错了。

我已将其推送到我的GitHub仓库以便查看:alkapwn3d/vending-machine-go

4 回复

哎呀。我早该知道的,不过这样说得通。 非常感谢您,善良的先生。

更多关于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.govending_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编译整个包

你的错误可能是因为:

  1. 只运行了go run main.go而没有包含vending_machine.go
  2. 文件不在同一目录
  3. 包声明不一致

检查后重新运行即可解决。

回到顶部