Types “类型的间接费用”;别名";围棋

Types “类型的间接费用”;别名";围棋,types,go,overhead,type-alias,Types,Go,Overhead,Type Alias,我正在写vector.go作为我程序的一部分。它提供了一个三维向量结构和一些向量操作 对于常规向量类型的对称性,我想提供一个标量类型: type scalar float64 我喜欢这样,因为我没有理由每次都指定标量的精度。事实上,它们是64位的,这是一个细节,我宁愿只指定一次 唯一的问题是,我知道这与C中的typedef不同。在幕后似乎还有更多的事情要做。我的问题:这会产生任何开销吗?如果是,什么时候,多少钱?当性能非常关键时,我可以使用此选项吗?(假设我将用scalar替换每次出现的flo

我正在写
vector.go
作为我程序的一部分。它提供了一个三维
向量
结构和一些向量操作

对于常规
向量
类型的对称性,我想提供一个
标量
类型:

type scalar float64
我喜欢这样,因为我没有理由每次都指定标量的精度。事实上,它们是64位的,这是一个细节,我宁愿只指定一次


唯一的问题是,我知道这与C中的
typedef
不同。在幕后似乎还有更多的事情要做。我的问题:这会产生任何开销吗?如果是,什么时候,多少钱?当性能非常关键时,我可以使用此选项吗?(假设我将用
scalar
替换每次出现的
float64
,并转换文本,例如,
scalar(1.0)

首先,不需要转换文本
x=1.0
x=scalar(1.0)
相同,假设x已经具有scalar类型

在Go中,没有用户定义的类型别名。在Go中,byte和uint8(内置类型)被认为是彼此的别名。它们是同一类型的两个名称。Float64和scalar不是同一类型。float64和scalar的值需要使用类似于
s=scalar(f)
的方法在彼此之间进行转换,而byte和uint8则不需要

但是,这种转换没有开销。这些类型在编译时强制执行,以确保代码正确性,但不会影响执行期间的性能。只有在执行类型断言或使用反射时,执行才会受到影响。然而,这些差异影响的是逻辑,而不是性能

当性能非常关键时,我可以使用此选项吗


是的,谢谢。就字面意义而言,我考虑的更多是
x:=scalar(1.0)
(或者等效地
var x scalar=1.0
),以防止1.0被推断为浮点64。