Go get all dependencies возвращает нераспознанный путь импорта для Terratest

#go #terratest

#Вперед #terratest

Вопрос:

Конфигурация

  • go1.15.2 darwin /amd64
  • macOS Catalina v10.15.7

.zshrc файл

 export GOPATH=$HOME/go
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
  

Что я пытаюсь сделать

Я новичок в Go и пытаюсь использовать Terratest для написания теста для сборки упаковщика.

При попытке запуска go test my_test.go я продолжаю получать ошибки, в которых говорится, что мне нужно установить отсутствующие пакеты.

../../../../../ go/src/github.com/gruntwork-io/terratest/modules/aws/sqs.go:10:2: не удается найти пакет «github.com/google/uuid » в любом из:
/usr/local/opt/go/libexec/src/github.com/google/uuid (из $GOROOT) /Users/username/go/src/github.com/google/uuid (из $GOPATH).
СБОЙ командной строки-аргументы [сбой установки] СБОЙ

Поиск в Google я обнаружил, что запуск go get -u ./... из каталога, в котором находится мой тестовый файл, должен устанавливать эти пакеты

Проблема

При запуске go get -u ./... я получаю следующую ошибку:

пакет _/Users/username/github.com/my-org/my-repo/packer/tests: нераспознанный путь импорта «_/Users/username/github.com/my-org/my-repo/packer/tests»: путь импорта не начинается с имени хоста

Для дополнительного контекста это структура каталогов, которую я использую:

 ~ 
    github.com/my-org/my-repo/
        packer/
            tests/
                my_test.go
  

И вот тестовый файл, который я создал, используя этот пример terratest в качестве ссылки:

 package test

import (
    "testing"

    "github.com/gruntwork-io/terratest/modules/packer"
    "github.com/stretchr/testify/assert"
    terratest_aws "github.com/gruntwork-io/terratest/modules/aws"
)

func TestMyAmiBuild( t *testing.T) {

    awsRegion := "us-east-1"

    packerOptions := amp;packer.Options{
        // Path to the Packer template under test
        Template: "../template/template.json",

        // Variables to pass to Packer build
        Vars: map[string]string{
            "ami_name": "my-ami"
        },

        // Only build the AWS AMI
        Only: "amazon-ebs",
    }

    // Build the Packer template
    amiID := packer.BuildArtifact(t, packerOptions)

    // Clean up the AMI after we're done
    defer terratest_aws.DeleteAmiAndAllSnapshots(t, awsRegion, amiID)

    // Check if AMI is private
    amiIsPublic := terratest_aws.GetAmiPubliclyAccessible(t, awsRegion, amiID)
    assert.False(t, amiIsPublic)
}

  

Комментарии:

1. Здравствуйте, вы выбрали хорошие инструменты, вы почти на месте 🙂 Основная проблема заключается в том, что вы используете старый способ Go, перед модулями. 1. Не экспортируйте все переменные среды, они просто добавляют путаницу и ошибки; 2. больше не нужно помещать ваш код в GOPATH, поместите его туда, куда вы хотите; 3 прочитайте и используйте go mod init. Для ввода модуля go см. «Быстрый запуск» github.com/golang/go/wiki/Modules