Структурирование мультиисполняемого проекта Go - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь построить проект архитектуры микро-сервисов в Go.В настоящее время я использую Go 1.11, который поддерживает модули, поэтому я помещаю свой корневой каталог в произвольно выбранный каталог за пределами GOPATH.

Если я правильно понимаю концепции архитектуры микро-сервисов, хотя мои микро-сервисы нуждаются в этомчтобы быть независимыми, они могут делиться зависимостями (и я не вижу другого способа сделать что-нибудь, не так ли?)

Ниже приведена моя структура каталогов:

.
├── go.mod
├── lambda
│   └── account_create
│       └── main.go
├── readme.md
└── types
    ├── account.go
    ├── location.go
    ├── order.go
    ├── pricing.go
    ├── product.go
    └── types.go

Теперь поведение яожидается, что он сможет запустить go build lambda/account_create и получить исполняемый файл с этой функциональностью, чтобы я мог передать его соответствующей лямбда-функции AWS.

Однако, когда я запускаю команду, я получаю:

can't load package: package lambda/account_create: unknown import path "lambda/account_create": cannot find module providing package lambda/account_create

Пожалуйста, объясните мне, почему это не работает, и дайте мне несколько советов о том, как должен выглядеть такой проект.

Большое спасибо!

Редактировать Вот мое lambda/account_create/main.go содержимое файла:

package account_create

import (
    "fmt"
    "roasted.ro/pkg/types"
)

func main() {
    account := types.UserAccount{Name: "Victor"}
    fmt.Printf("Welcome %s", account.Name)
}

1 Ответ

0 голосов
/ 29 октября 2018

Чтобы ответить на последнюю часть вашего вопроса (поскольку первая половина больше о предпочтениях), вам нужно сделать:

go build ./lambda/account_create

Обратите внимание на ./. go build принимает имя пакета или путь. Если вы не добавляете путь к ./, это предполагает, что вы даете ему имя пакета.

Редактировать : пакет должен быть main, если вы хотите исполняемый файл. Согласно документам , вы всегда должны использовать package main для проектов, которые создают исполняемый файл:

Исполняемые команды должны всегда использовать package main.

Редактировать : Я добавлю некоторые мнения о макете:

Рассмотрите, какие части вашего проекта экспортируются в другие проекты go. Это значит, что кто-то может импортировать ваш пакет и ожидать, что он приобретет ценность, и не потеряет свой код при изменении вашего.

Это должно быть либо в пакете github.com/you/pkg/somepath, либо просто github.com/you/somepath.

Все остальное (кроме основных пакетов) должно быть в пакете /internal.

Обычно я делаю /cmd/myexecurable1 /cmd/myexecurable2 и т. Д. Для каждого исполняемого файла.

...