Golang中一个目录包含两个可执行文件的实现方法

Golang中一个目录包含两个可执行文件的实现方法 如何在一个目录中维护多个文件?

/src/…/farkhad/hiphop/: hip.go hop.go

hip.go

package main

func main() {
	print("hip")
}

hop.go

package main

func main() {
  print("hop")
}

如果我运行"go build",会收到错误:

$ go build
# github.com/farkhad/hiphop
.\hop.go:3:6: main redeclared in this block
        previous declaration at .\hip.go:3:6

更多关于Golang中一个目录包含两个可执行文件的实现方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你可以在同一个包中包含多个文件,但不能重复定义相同的函数。你需要将其中一个 main 函数重命名为其他名称。

不过,如果你希望生成两个不同的可执行文件,则需要将它们分别放置在不同的文件夹中。

更多关于Golang中一个目录包含两个可执行文件的实现方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,每个目录只能有一个main包,因为main函数是程序的入口点。当目录中有多个文件都声明为package main并包含main函数时,编译器会报"main redeclared"错误。

要在一个目录中维护多个可执行文件,有以下几种解决方案:

方案1:使用不同的包名,分别构建

将文件改为不同的包名,然后分别指定文件进行构建:

hip.go

package hip

func main() {
	print("hip")
}

hop.go

package hop

func main() {
	print("hop")
}

构建命令:

go build -o hip hip.go
go build -o hop hop.go

方案2:使用构建标签(build tags)

为每个文件添加构建标签,然后分别构建:

hip.go

//go:build hip

package main

func main() {
	print("hip")
}

hop.go

//go:build hop

package main

func main() {
	print("hop")
}

构建命令:

go build -tags hip -o hip
go build -tags hop -o hop

方案3:使用子目录结构(推荐)

创建子目录来组织不同的可执行文件:

/src/…/farkhad/hiphop/
├── hip/
│   └── main.go
└── hop/
    └── main.go

hip/main.go

package main

func main() {
	print("hip")
}

hop/main.go

package main

func main() {
	print("hop")
}

构建命令:

go build ./hip
go build ./hop

或者分别进入子目录构建:

cd hip && go build
cd ../hop && go build

方案4:使用go:generate指令

在目录中创建一个生成脚本:

generate.go

//go:generate go build -o hip hip.go
//go:generate go build -o hop hop.go

然后运行:

go generate

最推荐的解决方案是方案3(子目录结构),这是Go社区中管理多个可执行文件的标准做法,保持了代码的清晰组织和构建的简便性。

回到顶部