【问题标题】:How can I "go run" a project with multiple files in the main package?如何“运行”主包中包含多个文件的项目?
【发布时间】:2015-03-20 19:33:06
【问题描述】:

我在 main 包中有一个名为 main.go 的文件。因为代码不可重用,所以我想将部分代码分开放在不同的文件中,但放在同一个包中。

如何在不创建单独包的情况下将main.go 的内容拆分为多个文件?

我想要一个这样的目录结构:

ls foo

# output:
main.go
bar.go
  • 文件:bar.go
package main

import "fmt"

func Bar() {
  fmt.Println("Bar")
}
  • 文件:main.go
package main

func main() {
  Bar()
}

当我运行go run main.go 时,它给了我:

# command-line-arguments
./main.go:4:2: undefined: Bar

【问题讨论】:

    标签: go package


    【解决方案1】:

    2019 年 7 月 26 日更新(适用于 go >=1.11)

    go run .
    

    也可以在 Windows 上工作。

    原始答案(适用于非 Windows 环境)

    代码确实有效。问题是我应该运行而不是运行go run main.go

    go run *.go
    

    【讨论】:

    • 除非您的文件夹中有*_test.go。然后你需要 (1) shopt -s ext glob 和 (2) go run !(*_test).go
    • 那些使用 appengine 的人呢?
    • 我试过go run ./cmd/myCmd/...,它对我有用。当有_test.go 文件时,也许这是正确的方法?
    • go run ../your_folder 从工作文件夹中为我工作
    • 随便go run .
    【解决方案2】:

    第一种方法是运行

    go run *.go
    

    另一种方法是生成exe文件

    go build
    

    然后运行那个.exe文件

    ./filename.exe
    

    【讨论】:

      【解决方案3】:

      在我看来,这个问题的最佳答案隐藏在顶部答案的 cmets 中。

      运行这个:

      go run .
      

      这将运行主包中的所有文件,但不会给出类似

      的错误消息
      go run: cannot run *_test.go files (main_test.go)
      

      向@BarthesSimpson 致敬

      【讨论】:

        【解决方案4】:

        2018 年 8 月更新,Go 1.11section "Run" 状态:

        go run 命令现在允许单个导入路径、目录名称或匹配单个包的模式。
        这允许go run pkggo run dir,最重要的是go run .


        2015 年 1 月的原始答案

        如“How to compile Go program consisting of multiple files?”中所述,go run 需要一个文件列表,因为它“编译并运行包含命名 Go 源文件的 main 包”。
        因此,您当然可以使用 go run 将您的 main 包拆分为多个文件。

        这与 go build/go install 不同,后者需要包名(而不是文件名)。
        一个简单的go build 会生成一个以父文件夹命名的可执行文件。

        请注意,作为illustrated by this threadgo run *.go 在 Windows CMD 会话中不起作用,因为shell doesn't do wildcard expansion

        【讨论】:

        • 是否有使用 Windows 命令提示符运行多个带有 run 的 go 文件的解决方法?
        • 谢谢!这对我帮助很大。我一直想知道为什么我不能只用 main.go 运行代码,因为它是同一个包,但我觉得他们为什么不允许这样做是有道理的。
        • @Luke 只需指定两个文件,用空格分隔。
        【解决方案5】:

        如果您尝试按照最新版本 (1.11) 使用 gorilla mux 在 localhost 上运行多个文件。尝试使用以下 2 个命令中的任何一个。

        1. 去安装 && FolderName -port 8081 .

        2. 去构建 && ./FolderName -port 8081。

        在终端中执行命令之前,请确保您位于源文件夹中,即 go/src/FolderName。

        【讨论】:

          【解决方案6】:

          如前所述,您可以说 go run *.go,但对于 Windows,您可以只列出脚本文件(因为 *.go 不起作用)-go run main.go other.go third.go

          【讨论】:

          • 是的,没错。在 Windows 中,我必须运行 go run .
          【解决方案7】:

          对于 Windows 安装 Cygwin 并使用它代替命令提示符。然后“go run *.go”就可以了。

          【讨论】:

          • 我会为此建议 MinGW,但如果你问我,这种方法是正确的。我怀疑任何人都可能真正对cmd.exe产生情感依恋
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-05
          • 1970-01-01
          • 2017-01-24
          • 2014-07-24
          • 1970-01-01
          • 2016-04-12
          • 1970-01-01
          相关资源
          最近更新 更多