【发布时间】:2022-02-13 20:14:35
【问题描述】:
我还是个新手,我是 C++ 背景,我真的想知道是否有可能实现这样的目标。假设我有一个数学库,我想让一个命名空间成为另一个这样的命名空间的子级。
- 主包
- 数学包
- 矩阵包
- ...
我想这样调用我的代码;
math.matrix.CreateTranslation(mat4, 30, 50, 0)
有没有办法在go中实现这种行为?
【问题讨论】:
我还是个新手,我是 C++ 背景,我真的想知道是否有可能实现这样的目标。假设我有一个数学库,我想让一个命名空间成为另一个这样的命名空间的子级。
我想这样调用我的代码;
math.matrix.CreateTranslation(mat4, 30, 50, 0)
有没有办法在go中实现这种行为?
【问题讨论】:
有没有办法在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。
虽然有可能,但很明显,这是试图将一种组织模式强加于一种不支持它的语言。
【讨论】: