命名空间的 Golang 命名空间

Golang namespaces of namespaces

我有点陌生,作为 C++ 背景,我真的很想知道是否有可能实现这样的目标。假设我有一个数学库,我想像这样将一个命名空间作为另一个命名空间的子命名空间。

我想这样调用我的代码;

math.matrix.CreateTranslation(mat4, 30, 50, 0)

有没有办法在 go 中实现这种行为?

Is there a way to achieve this kind of behaviour in go?

不,不是真的。

您可以导入 "module/math",然后执行 math.SomeFunc。或者您可以导入 "module/math/matrix" 然后执行 matrix.SomeOtherFunc。这些被称为“合格标识符”。

但是您不能导入 "module/math""module/math/matrix" 然后使用 嵌套 “限定标识符”如 math.matrix.SomeOtherFunc。它只是不属于 spec.


从技术上讲,可以执行以下操作:

math.Matrix.CreateTranslation(mat4, 30, 50, 0)

其中 Matrixmath 包中导出的 变量 并且其类型在其方法集中有一个 CreateTranslation 方法,或其类型是 struct 类型,具有名为 CreateTranslation.

的函数 field

虽然有可能,但很明显,这是一种将组织模式强加于不支持它的语言的尝试。