rob*_*bmj 7 package go go-toolchain
我遇到了go run main.go产生错误的问题:
# command-line-arguments
./main.go:9: undefined: test
Run Code Online (Sandbox Code Playgroud)
但是命令go build && ./goruntest编译并运行程序就好了.
输出是:
嗨来自test()
嗨,来自sameFileTest()
您好,来自pkgtest.Test()
您好,来自pkgtest.Test1()
我有这样的目录设置:
go/src/github.com/username/goruntest/
pkgtest/
pkgtest.go
pkgtest1.go
main.go
test2.go
Run Code Online (Sandbox Code Playgroud)
这是代码.
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()"
}
Run Code Online (Sandbox Code Playgroud)
gotest1.go
package main
func test() string {
return "Hi from test()"
}
Run Code Online (Sandbox Code Playgroud)
pkgtest/pkgtest.go
package pkgtest
func Test() string {
return "Hi from pkgtest.Test()"
}
Run Code Online (Sandbox Code Playgroud)
pkgtest/pkgtest1.go
package pkgtest
func Test1() string {
return "Hi from pkgtest.Test1()"
}
Run Code Online (Sandbox Code Playgroud)
我知道问题是第二个文件的一部分,package main我也理解没有真正的理由让第二个文件进入main.
我的问题是:为什么go run无法处理此设置但是构建和运行可执行文件的工作正常?
编辑
包含第二个文件 pkgtest
我也明白命令go run main.go gotest1.go有效,但为什么需要指定gotest1.go?
为简洁起见,我最初省略了这些细节.但现在我发现他们对这个问题很重要.
尝试提供所有相关文件 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.
Run Code Online (Sandbox Code Playgroud)