混淆了golang项目布局存储库在实际中的工作方式

时间:2018-12-15 18:40:34

标签: go

这个问题是关于流行的project-layout的。 这仅仅是布局代码的一种方法,但是二进制文件的实际编译将在

中进行。
/cmd/app1/
/cmd/app2/

因此,如果我有一个网站,它仍将被视为仅启动http侦听器等的cmd应用程序。

还是整个布局中有几个“入口”点,而不仅仅是cmd文件夹中?

使用这种布局,您实际如何构建和运行应用程序? (或其中之一,因为据我所知它支持多个)

是这样的吗?

go build cmd/app1/*.go吗?

2 个答案:

答案 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 

只要该文件夹中有一个主软件包,您就可以构建程序。