Как использовать внутренние пакеты с модулями go? - PullRequest
1 голос
/ 20 апреля 2020

Я использую go модули в моем проекте. У меня есть общий код во внутренней папке.

.
├── README.md
├── internal
│   └── shared
│       ├── request.go
│       └── request_test.go
└── web
    ├── README.md
    └── go
        └── src
            └── webservice
                ├── go.mod
                ├── go.sum
                └── main.go

Я не могу получить доступ к внутреннему / общему ресурсу через веб-сервис при использовании модулей go. Я получаю следующую ошибку:

package internal/shared is not in GOROOT (/usr/local/go/src/internal/shared)

При импорте из веб-сервиса в main. go:

import "internal/shared"

Примечание: я пытаюсь поделиться внутренним / общим с другим модом, который не указаны выше.

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Я закончил исправление, добавив go .mod к внутреннему / shared и отредактировав go .mod в веб-сервисе следующим образом:

module webservice

go 1.14

replace example.com/shared => ../../../../internal/shared/

require (
    github.com/gorilla/mux v1.7.4
    github.com/spf13/viper v1.6.3
    github.com/stretchr/testify v1.5.1
    example.com/shared v0.0.0-00010101000000-000000000000
)

example.com / shared v0. 0.0-00010101000000-000000000000 было сгенерировано "go mod init webservice"

0 голосов
/ 21 апреля 2020

Ваш go.mod внутри web/go/src/webservice указывает, что этот пакет находится в другом модуле, чем ваш internal/shared пакет. Он должен работать, когда вы перемещаете go.mod и go.sum на root всего проекта. Тогда пакеты web/go/src/webservice и internal/shared будут находиться внутри одного go module.

. Это сработало для меня:

    .
    ├── go.mod
    ├── go.sum
    ├── internal
    │   └── shared
    │       └── request.go
    │  
    └── web
        └── go
            └── src
                └── webservice
                    └── main.go

И вы должны включить весь путь go-module при импорте internal/shared пакет в вашем main.go.

Итак, внутри вашего main.go импорт должен выглядеть как import "$your-go-module/internal/shared"

Подробнее о внутренних пакетах здесь

...