go загрузить файлы нагрузки из корневого каталога? [Дубликат]

Не знаю о лучшем, но этот , по крайней мере, правильный, если адреса имеют свои комментарии, разделенные и замененные пробелами.

Серьезно. Вы должны использовать уже написанную библиотеку для проверки электронной почты. Лучшим способом, вероятно, является просто отправить электронное письмо с подтверждением на этот адрес.

28
задан Jesse Brands 24 May 2014 в 16:58
поделиться

7 ответов

Не думаю, что это возможно. Мне не удалось найти документацию, в которой это явно указано, но я считаю, что go test всегда использует каталог пакетов (содержащий исходные исходные файлы) в качестве рабочего каталога.

20
ответ дан Evan 26 August 2018 в 21:42
поделиться

В качестве обходного пути я скомпилировал тест и выполнил тест из текущего каталога.

go test -c && ./<mypackage>.test

Или, если вы хотите использовать общую команду, которую вы можете использовать, вы можете переименовать тестовый файл с помощью опции -o.

go test -c -o xyz.test && ./xyz.test

6
ответ дан Joe 26 August 2018 в 21:42
поделиться

Я бы использовал переменную среды для размещения вашего приложения. Кажется, это лучший способ запускать инструменты go, поскольку тестовые программы можно запускать из временного местоположения.

// get home dir of app, use MYAPPHOME env var if present, else executable dir.
func exeDir() string {
    dir, exists := os.LookupEnv("MYAPPHOME")
    if exists {
        return dir
    } else {
        ex, err := os.Executable()
        if err != nil {
            panic(err)
        }
        exPath := path.Dir(ex)
        return exPath
    }
}
0
ответ дан kristianp 26 August 2018 в 21:42
поделиться

Вы можете использовать Caller для получения пути к текущему исходному исходному файлу, например:

package sample

import (
    "testing"
    "runtime"
)

func TestGetFilename(t *testing.T) {
    _, filename, _, _ := runtime.Caller(0)
    fmt.Println("Current test filename: " + filename)
}
15
ответ дан N8Theo 26 August 2018 в 21:42
поделиться

Хотя это не очень удобно, вы всегда можете передать его как переменную командной строки, например:

package blah_test

import (
    "flag"
    "fmt"
    "os"
    "testing"
)

var (
    cwd_arg = flag.String("cwd", "", "set cwd")
)

func init() {
    flag.Parse()
    if *cwd_arg != "" {
        if err := os.Chdir(*cwd_arg); err != nil {
            fmt.Println("Chdir error:", err)
        }
    }
}

func TestBlah(t *testing.T) {
    t.Errorf("cwd: %+q", *cwd_arg)
}

Затем запустите его, как:

┌─ oneofone@Oa [/tmp]                                                                                             
└──➜ go test . -cwd="$PWD"
--- FAIL: TestBlah (0.00 seconds)
        blah_test.go:16: cwd: "/tmp"
10
ответ дан OneOfOne 26 August 2018 в 21:42
поделиться

Вы можете использовать пакет os .

Вы хотели бы сделать что-то вроде этого

    func TestMyFunction(t *testing.T) {
        os.Chdir("./path")

        //TEST FUNCTION

        os.Chdir("..")
    }

В пакете os есть несколько возможностей .

3
ответ дан Richard Erickson 26 August 2018 в 21:42
поделиться

Независимо от того, где находится рабочий каталог. Это должно быть под вашим проектом Dir. Итак, мое решение

wd, _ := os.Getwd()
for !strings.HasSuffix(wd, "<yourProjectDirName>") {
    wd = filepath.Dir(wd)
}

raw, err := ioutil.ReadFile(fmt.Sprintf("%s/src/conf/conf.dev.json", wd))

Ваш путь должен всегда начинаться с вашего проекта Dir. Каждый раз, когда вы читаете файл в пакете и получаете доступ по адресу main.go или к вашему другому модулю пакета. Он всегда будет работать.

3
ответ дан Tecker.Yu 26 August 2018 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: