giftiaのblog

go语言main包的一个小tip

· giftia

Go 应用中 package main 的规则

package

  • golang 的所有文件都需要指定其所在的包(package),包有两种类型,一种是 main 包,使用 package main 在代码的最前面声明。另外一种就是 非 main 包,使用 package + 包名 。main 包可以有唯一的一个 main 函数,这个函数也是程序的入口。也只有 main 包可以编译成可执行的文件。

规则

  1. import 导入的是相对路径,非 package 名!
  2. 习惯上将 package 名和目录名保持一致,如实例中 package A 尽量在./A 文件夹下
  3. 代码中引用包方法 / 对象 / 变量时,如调用 package A 中的 a 函数,使用 A.a 而非目录名
  4. 同一目录下,所有源文件必须使用相同的包名,一个文件夹下只能有一个 package;如果多个文件夹下有同名 package,其实只是彼此无关的 package,如果需要同时使用不同目录下的同名 package,import 时需要为每个目录指定 package 别名:
  5. 同一 package 下不同文件间可以直接调用
  6. 大写字母开头的变量方法暴露到包外,包内大小写随意
  7. 多个 go 文件在 main 包下是无法相互调用的,需要使用 go run *.go 命令

上述转载自@Luson的文章https://learnku.com/articles/65136

我遇到的问题:

  • 多个 go 文件在 main 包下是无法相互调用的,但是编译器不会报错,
  • 直接运行go run main.go会报错undefined

解决办法:

  • 运行go run . 或者 go run *.go