GO - 文件的包名称

3
我了解到,在同一个目录下,所有的.go文件都必须命名为相同的包名。
考虑下面来自GitHub的示例
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)

位于目录../fogleman/nes/util中的roms.go文件的包名为main(与目录名不同)。

2)

位于目录../fogleman/nes中的main.go文件的包名为main(与目录名不同)。

问题:

为什么包名(main)与其目录名不同?


目录名和包名不需要匹配,但通常会按照惯例匹配。 - JimB
@JimB 如果我需要在另一个文件中导入 roms.go 的符号,那么我需要说 import github.com/fogleman/nes/util/main 吗? - overexchange
你只能通过路径导入,但不能导入主包;main是程序的入口点。 - JimB
@JimB 在 package main 中的 main 只是一个包名。为什么它会暗示不能被导入呢? - overexchange
1
不,main不仅仅是一个包名,它被定义为包含一个 main 函数并设置为程序入口点的包。每个程序都需要单个 main 包,您不能导入多个。 - JimB
1个回答

2

我相信这个repo的作者想要运行roms.go作为一个单独的程序来进行测试。如果不把这个文件放在main包中,这是做不到的。如果你在根项目目录下:

cd util

go run roms.go path/to/roms/dir


GO允许在一个目录(../fogleman/nes/util/)或目录(../fogleman/nes/)中使用package main的多个(超过一个).go文件吗? - overexchange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接