【发布时间】:2017-01-29 04:34:08
【问题描述】:
我了解到,目录中的所有.go 文件必须命名相同的包。
考虑下面来自github的example,
fogleman/nes/
nes/
apu.go
cartridge.go
console.go
controller.go
cpu.go
filter.go
ines.go
mapper.go
mapper1.go
mapper2.go
mapper3.go
mapper4.go
mapper7.go
memory.go
palette.go
ppu.go
ui/
util/
.gitignore
LICENSE.md
README.md
main.go
因此,目录(../fogleman/nes/nes) 中的所有.go 文件都具有包名称nes(与目录名称相同)。
同样地,../fogleman/nes/ui目录下的所有.go文件的包名ui(与目录名相同)。
考虑以下两个文件,我有一个问题,
1)
roms.go 目录(../fogleman/nes/util) 中的文件有包名main(不同于目录名)
2)
main.go 目录(../fogleman/nes) 中的文件有包main(与目录名不同)。
问题:
为什么包名(main)和目录名不一样?
【问题讨论】:
-
目录名和包名不需要匹配,一般都是按照约定来匹配的。
-
@JimB 如果我需要在另一个文件中导入
roms.go符号,那么,我需要说import github.com/fogleman/nes/util/main吗? -
只能通过路径导入,不能导入主包;
main是程序入口点。 -
@JimB
maininpackage main只是一个包名。为什么会有不被导入的意思? -
不,main 不仅仅是一个包名,它被定义为包含
main函数并设置为程序入口点的包。每个程序都需要一个main包,不能导入多个。