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文件?
如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 也是同样的道理。
#5
更多评论
main 包只能有一个,但是可以有多个文件。你是在执行 go run main.go 的时候出错了吧,因为你没把另一个文件包含进来,Test() 就不知道是啥了,你要这么跑 go run main.go func.go
#2