我怎样才能“去跑”;主包中有多个文件的项目?

我在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
117415 次浏览

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

go run .

将工作在窗口以及。

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

代码实际上是可以工作的。问题是,我不应该运行go run main.go,而是应该运行:

go run *.go

更新2018年8月,与走1.11,一个部分“运行”声明:

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


原答案2015年1月

正如在“如何编译由多个文件组成的Go程序?”中提到的,go run需要一个文件列表,因为它“编译并运行包含命名Go源文件的main包” 所以你当然可以用go run将你的main包分割成几个文件

go build/go install不同,后者期望包名(而不是文件名) 一个简单的go build将生成一个以父文件夹命名的可执行文件

请注意,作为由本线程说明go run *.go将在Windows CMD会话中不起作用,因为Shell不做通配符展开. c是go run *.go

对于Windows,安装Cygwin并使用它代替命令提示符。“快跑。”“Go”就行了。

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

如果你试图在本地主机上运行多个文件,使用最新版本(1.11)中的gorilla mux。尝试使用以下2个命令。

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

  2. 去建造&&./文件夹名-端口8081。

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

在我看来,这个问题最好的答案就藏在对顶部答案的评论中。

运行这个:

go run .

这将运行主包中的所有文件,但将给出一个错误消息,如

go run: cannot run *_test.go files (main_test.go)

向@BarthesSimpson致敬

第一种方法是运行

go run *.go

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

go build

然后运行。exe文件

./filename.exe

多个选项

  1. go run .
  2. go run *.go
  3. make run使用Makefile其中,添加任何上述命令作为构建目标。

用于测试

  1. go test ./...
  2. make test使用Makefilego test ./...作为构建目标