我遇到了go run main.go
产生错误的问题:
# command-line-arguments
./main.go:9: undefined: test
但是,这些命令go build && ./goruntest
可以很好地编译和运行程序。
输出是:
来自 test()
你好来自sameFileTest()
来自 pkgtest.Test()
来自 pkgtest.Test1()
我的目录设置如下:
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
?
为了简洁起见,我最初省略了这些细节。但现在我看到它们对这个问题很重要。