mk1*_*k12 5 types overhead go type-alias
我正在写作vector.go
我课程的一部分.它提供了三维vector
结构和一些向量运算.
对于一般vector
类型的对称性,我想提供一个scalar
类型:
type scalar float64
Run Code Online (Sandbox Code Playgroud)
我喜欢这个,因为我没有理由每次都要指定我的标量的精度.它们是64位的事实是一个细节,我宁愿只指定一次.
唯一的问题是我知道这不像typedef
C中那样.幕后似乎还有更多的事情发生.我的问题:这会产生任何开销吗?如果是的话,何时以及多少?当性能绝对至关重要时,我可以使用它吗?(假设我将取代的每次出现float64
与scalar
和转换文字,例如,scalar(1.0)
.)
Ste*_*erg 11
首先,没有必要转换文字.x = 1.0
与x = scalar(1.0)
假设x已经具有标量类型相同.
在Go中,没有用户定义的类型别名.在Go中,byte和uint8(内置类型)被认为是彼此的别名.它们是同一类型的两个名称.Float64和标量不是同一类型.float64和标量的值需要使用s = scalar(f)
while字节和uint8 之间相互转换.
但是,这种转换没有开销.这些类型在编译时强制执行,以保证代码正确性,但不会影响执行期间的性能.只有在键入断言或使用反射时,才会影响执行.但是,这些差异会影响逻辑,而不是性能.
当性能绝对至关重要时,我可以使用它吗?
是