golang中目录结构和包的关系

Oli*_*ams 1 package go

我是 Golang 的新手,并且很好地掌握了包的概念,但对它们与文件夹/目录位置的关系有疑问。

所以我正在处理一个相当大的项目,/pkg目录中有多个子目录。可能package ___声明了30 多个不同的命名空间。

通常,目录中的所有文件当然都具有相同的包,例如/pkg/system/api-client;声明了该目录中的所有文件package apiclient

当我注意到两个文件时,问题就出现了package config;一个在/pkg/config/config.go,另一个在/pkg/writer-job/pkg/config/config.go

它们是同一个包的一部分吗?如果是这样,这个约定是什么(因为它看起来很分散)?如果没有,您如何在词法上将其分离config为两个独立的包?我确实搜索了文档,但没有看到这个。

Bur*_*dar 10

有两个概念:包名和导入路径。

包名称是您package在 go 文件中使用 a作为第一个语句声明的名称。一个目录最多可以包含一个包。

导入路径是您导入该包的方式,并显示包的位置。导入后,声明的package名称将用于限定从该包中导出的标识符。

如果包名称冲突,您可以为其中之一定义别名。

import (
   "someproject/pkg/config"
   writerconfig "someproject/pkg/writer-job/config"
)
Run Code Online (Sandbox Code Playgroud)

然后,config.X引用第一个包,再writerconfig.X引用第二个。

  • 这些将是不同的包,也称为“config”。包的所有文件必须位于同一目录中。 (4认同)