【问题标题】:GO - Package name of filesGO - 文件的包名
【发布时间】: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 main in package main 只是一个包名。为什么会有不被导入的意思?
  • 不,main 不仅仅是一个包名,它被定义为包含main 函数并设置为程序入口点的包。每个程序都需要一个 main 包,不能导入多个。

标签: go package


【解决方案1】:

我相信这个 repo 的作者打算将 roms.go 作为单独的测试程序运行。如果不将此文件放入包main,则无法完成此操作。如果你在项目根目录下:

cd util

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

【讨论】:

  • GO 是否允许多个(多个).go 文件在一个目录(../fogleman/nes/util/)或目录(../fogleman/nes/)与package main
猜你喜欢
  • 2015-09-21
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2015-05-08
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多