我在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
9条答案
按热度按时间erhoui1w1#
更新日期:2019年7月26日(适用于go〉=1.11)
将工作在windows以及。
原始答案(适用于非Windows环境)
这段代码实际上是可以工作的,问题是我不应该运行
go run main.go
,而应该运行:vcudknz32#
2018年8月更新,使用Go 1.11,“运行”章节指出:
go run
命令现在允许单个导入路径、目录名或与单个包匹配的模式。这允许
go run pkg
或go 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/go install
需要包名(而不是go文件名)。一个简单的
go build
将生成一个以父文件夹命名的可执行文件。请注意,作为illustrated by this thread,
go run *.go
不能在Windows CMD会话中工作,因为shell doesn't do wildcard expansion。qfe3c7zg3#
在我看来,这个问题的最佳答案隐藏在对顶部答案的评论中。
运行以下命令:
这将运行主包中的所有文件,但不会给予如下错误消息
感谢@BarthesSimpson
gev0vcfq4#
如前所述,您可以输入
go run *.go
,但对于Windows,您可以只列出脚本文件(因为 *.go不起作用)-go run main.go other.go third.go
brqmpdu15#
执行此操作的第一个方法是运行
另一种方法是生成exe文件
然后运行该.exe文件
enxuqcxy6#
多种选择
go run .
go run *.go
make run
使用Makefile
,其中,添加上述任意命令作为构建目标。用于测试
go test ./...
make test
使用Makefile
,go test ./...
作为构建目标pod7payv7#
对于Windows安装Cygwin并使用它而不是命令提示符。“go run *.go”将工作。
js5cn81o8#
如果你想在本地主机上用gorilla mux运行多个文件,请尝试使用以下两个命令中的任意一个。
1.安装&&文件夹名称-端口8081。
1.转到build && ./文件夹名称-端口8081。
在终端中执行命令之前,请确保您位于源文件夹中,即go/src/FolderName。
cfh9epnr9#
对于今天的Golang,
go run .
本身是不够的。首先,您需要使用一次性设置初始化文件夹:
现在,您可以使用以下命令运行程序:
虽然它没有解释为与
go mod init
一起使用而选择的名称的意义,但下面演示了此方法:一个关键点是,对于最普通的情况(如典型的go run .
),“为您的代码启用依赖关系跟踪”是可选的,但对于任何非普通的应用程序或工作流(例如使用非标准导入),这是必需的。上面例子中使用的
noname
可以用任何类似于相对路径名的东西来代替,如果你构建的是一个主模块,而且你不打算把它导入到其他地方,那么你用什么作为模块名基本上没有关系。之前在此要求对
go mod init
进行基本解释:Can someone please dumb down go mod init for me?注意:如果没有
go mod init (somename)
,go run .
将返回如下错误...可能存在替代解决方案:Error message "go: go.mod file not found in current directory or any parent directory; see 'go help modules'"