如何在主程序包中“运行”包含多个文件的项目?

时间:2015-01-22 04:51:11

标签: go

我目前在我的主程序包中有一个名为main.go的文件。如何在不创建单独的包的情况下将main.go的内容拆分为多个文件,因为代码不可重用。

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

$ ls foo

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

7 个答案:

答案 0 :(得分:161)

上面的代码实际上有效。问题是我需要运行

go run *.go

而不是

go run main.go

答案 1 :(得分:63)

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需要一个文件列表,因为它"编译并运行包含命名的main包去源文件"。
因此,您当然可以将main个包与go run分成几个文件。

这与期望包名称(而不是文件名)的go build/go install不同 一个简单的go build将产生一个以父文件夹命名的可执行文件。

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

答案 2 :(得分:4)

如上所述,您可以说go run *.go,但是对于Windows,您可以只列出脚本文件(因为* .go无法使用)-go run main.go other.go third.go

答案 3 :(得分:0)

对于Windows安装Cygwin并使用它而不是命令提示符。 “go run * .go”将会起作用。

答案 4 :(得分:0)

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

  
      
  1. 转到install && FolderName -port 8081。

  2.   
  3. 开始构建&& ./FolderName -port 8081。

  4.   

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

答案 5 :(得分:0)

我认为,对这个问题的最佳答案隐藏在对最高答案的评论中。

只需运行:

aggregate

这将运行主程序包中的所有文件,但会给出错误消息,例如

go run .

对@BarthesSimpson表示敬意

答案 6 :(得分:0)

执行此操作的第一种方法是运行

go run *.go

另一种方法是生成一个exe文件

go build

然后运行该.exe文件

./filename.exe