【问题标题】:relationship between directory structure and packages in golanggolang中目录结构与包的关系
【发布时间】:2021-09-07 02:00:38
【问题描述】:

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

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

通常情况下,目录中的所有文件都将具有相同的包,例如/pkg/system/api-client;该目录中的所有文件都声明为package apiclient

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

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

【问题讨论】:

  • golang.org/doc/code#Organization — 同样,两个包可能具有相同的名称但不同的导入路径
  • 也许部分混淆来自于“命名空间”这个词的使用。 Go 没有命名空间。包可能有名称,但名称本身并不是代码的组织:包是。

标签: go package


【解决方案1】:

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

包名是你用package作为go文件中的第一条语句声明的。一个目录最多可以包含一个包。

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

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

import (
   "someproject/pkg/config"
   writerconfig "someproject/pkg/writer-job/config"
)

那么,config.X 指的是第一个包,writerconfig.X 指的是第二个。

【讨论】:

  • 谢谢。我的另一个问题是关于`“someproject/pkg/config”` - 该目录中可能有几个文件,所有包config。但是我是否也可以拥有包含package config 文件的子目录?
  • 这些将是不同的包,也称为config。一个包的所有文件都必须在同一个目录中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 2019-05-21
相关资源
最近更新 更多