main包不同文件定义的方法及常量无法相互调用,不是main包就行
package main
import "fmt"
const(
Const1 = "1"
Const2 = "12"
Const3 = "123"
Const4 = "1234"
)
var(
str1 string = "str1"
)
func Test() {
fmt.Println("Test")
}
package main
import ()
func main(){
Test();
fmt.Println(Const4 )
fmt.Println(str1)
}
无法编译说找不到Test()方法\常量Const4 \str1
非main包,其他包内不同文件却可以相互调用(编译没有出错),是因为都引入到main包了还是因为非main包先被编译成了.a文件?
有疑问加站长微信联系(非本文作者)

只能有一个main包吧
main 包只能有一个,但是可以有多个文件。你是在执行 go run main.go 的时候出错了吧,因为你没把另一个文件包含进来,Test() 就不知道是啥了,你要这么跑 go run main.go func.go
你好,是一个main包的不同文件的相互调用
你好,只有一个main包,但是两份代码属于不同的文件。 执行 go run main.go 报错了 说找不到Test 这些东西
如2楼所言,你需要 go run main.go xxx.go 或者简单一点 go run *.go
xxx.go 和 main.go 同属 main 包,但是你也得像上面那样去运行。
因为我们执行在 go run ... 这个命令的时候,后面跟的是一个go源代码文件列表参数,其中一个go文件必须要有一个 main 函数,作为程序的入口。
如果只是 go run main.go ,那么就会从这个文件里面去找程序的入口,注意,我们提供给 go run 命令的是 main.go 这个文件,而不是 main 包。所以go会从这个文件开始,理清楚包的依赖关系之类的,因为 xxx.go 这个文件不存在于 main.go 的引用关系中,所以在编译的时候,里面的内容对于 main.go 来讲是不可见的。
go test 也是同样的道理。
go run "main.go所在的package,就是main.go所在目录名称去掉GOPATH/src前缀"