这个问题是关于流行的project-layout的。 这仅仅是布局代码的一种方法,但是二进制文件的实际编译将在
中进行。/cmd/app1/
/cmd/app2/
因此,如果我有一个网站,它仍将被视为仅启动http侦听器等的cmd应用程序。
还是整个布局中有几个“入口”点,而不仅仅是cmd文件夹中?
使用这种布局,您实际如何构建和运行应用程序? (或其中之一,因为据我所知它支持多个)
是这样的吗?
go build cmd/app1/*.go
吗?
答案 0 :(得分:2)
您可以
go build ./cmd/app/
例如我有这个模块
├── cmd
│ ├── cli
│ │ └── main.go
│ └── web
│ └── main.go
├── go.mod
└── service
└── service.go
go.mod只是
module example
service.go:
package service
import "fmt"
func DoSomething() {
fmt.Println("service processing")
}
cmd / web / main.go:
package main
import (
"example/service"
"fmt"
)
func main() {
fmt.Println("starting web program")
service.DoSomething()
}
cmd / cli / main.go:
package main
import (
"example/service"
"fmt"
)
func main() {
fmt.Println("starting cli program")
service.DoSomething()
}
建立网站:
go build ./cmd/web/
这将创建二进制文件web
运行网络
./web
// output:
// starting web program
// service processing
构建cli:
go build ./cmd/cli/
运行网络
./web
// output:
// starting cli program
// service processing
答案 1 :(得分:0)
如果要在文件夹中构建所有应用程序,可以执行以下操作:
go install ./...
这将在GOPATH的bin文件夹中构建所有应用程序,然后您可以运行所需的任何应用程序。
但是,如果要构建和运行特定的应用程序,则可以转到该文件夹并直接运行。
go build
只要该文件夹中有一个主软件包,您就可以构建程序。