Почему команде "go run" не удается найти второй файл в основном пакете?

я испытываю проблему, когда go run main.go выдает ошибку:

# command-line-arguments
./main.go:9: undefined: test
команды go build && ./goruntest компиляция и запуск программы просто отлично.

выход:

привет из test ()

привет от sameFileTest ()

привет от pkgtest.Test ()

привет от pkgtest.Тест1()

у меня есть настройка каталога так:

go/src/github.com/username/goruntest/
    pkgtest/
        pkgtest.go
        pkgtest1.go
    main.go
    test2.go

здесь код.

main.go

package main

import (
    "fmt"
    "github.com/username/goruntest/pkgtest"
)

func main() {
    fmt.Println(test())           // main.go:9
    fmt.Println(sameFileTest())
    fmt.Println(pkgtest.Test())
    fmt.Println(pkgtest.Test1())
}

func sameFileTest() string {
    return "Hi from sameFileTest()"
}

gotest1.go

package main

func test() string {
    return "Hi from test()"
}

pkgtest / pkgtest.go

package pkgtest

func Test() string {
    return "Hi from pkgtest.Test()"
}

pkgtest / pkgtest1.go

package pkgtest

func Test1() string {
    return "Hi from pkgtest.Test1()"
}

я понимаю, что проблема заключается во втором файле в составе package main и я также понимаю, что нет никакой реальной причины иметь второй файл в main.

мой вопрос: почему go run не удалось обработать эту настройку, но создание и запуск исполняемого файла работает нормально?

редактировать

включен второй файл в pkgtest

я также понимаю, что команда go run main.go gotest1.go работает, но почему мне нужно указать gotest1.go?

я первоначально опустил эти детали для краткости. Но теперь я вижу, что они важны для вопрос.

1 ответов


попробуйте предоставить все соответствующие файлы go run

$ go help run
usage: go run [build flags] [-exec xprog] gofiles... [arguments...]

Run compiles and runs the main package comprising the named Go source files.
A Go source file is defined to be a file ending in a literal ".go" suffix.