【问题标题】:Golang namespaces of namespaces命名空间的 Golang 命名空间
【发布时间】:2022-02-13 20:14:35
【问题描述】:

我还是个新手,我是 C++ 背景,我真的想知道是否有可能实现这样的目标。假设我有一个数学库,我想让一个命名空间成为另一个这样的命名空间的子级。

  • 主包
  • 数学包
    • 矩阵包
    • ...

我想这样调用我的代码;

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

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

【问题讨论】:

    标签: go package


    【解决方案1】:

    有没有办法在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)
    

    其中Matrix 是math 包中导出的变量,其类型要么在其方法集中具有CreateTranslation 方法,要么其类型为结构 em> 类型,它有一个名为CreateTranslation 的函数field。

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

    【讨论】:

    • 感谢您的解释,在您的第二次回答之后,它变得很清楚了。我想我会遵循语言标准而不是那样做。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2021-01-12
    相关资源
    最近更新 更多