main包不同文件的无法相互调用的原因?

Aruforce · 2018-04-23 18:35:19 · 4442 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-04-23 18:35:19 的主题,其中的信息可能已经有所发展或是发生改变。

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文件?


有疑问加站长微信联系(非本文作者)

第 1 条附言  ·  2018-04-25 19:44:45

上面的两个文件, 都在mainbao里, 文件名不一致。

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4442 次点击  
加入收藏 微博
6 回复  |  直到 2018-04-26 10:05:09
hahahaha
hahahaha · #1 · 7年之前

只能有一个main包吧

dong-hao
dong-hao · #2 · 7年之前

main 包只能有一个,但是可以有多个文件。你是在执行 go run main.go 的时候出错了吧,因为你没把另一个文件包含进来,Test() 就不知道是啥了,你要这么跑 go run main.go func.go

Aruforce
Aruforce · #3 · 7年之前
hahahahahahahaha #1 回复

只能有一个main包吧

你好,是一个main包的不同文件的相互调用

Aruforce
Aruforce · #4 · 7年之前
dong-haodong-hao #2 回复

main 包只能有一个,但是可以有多个文件。你是在执行 go run main.go 的时候出错了吧,因为你没把另一个文件包含进来,Test() 就不知道是啥了,你要这么跑 go run main.go func.go

你好,只有一个main包,但是两份代码属于不同的文件。 执行 go run main.go 报错了 说找不到Test 这些东西

smartwalle
smartwalle · #5 · 7年之前

如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 也是同样的道理。

marlonche
marlonche · #6 · 7年之前

go run "main.go所在的package,就是main.go所在目录名称去掉GOPATH/src前缀"

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传