在Golang,uint16与int,哪个成本更低?

在Golang,uint16与int,哪个成本更低?,go,Go,我使用的是64位服务器。我的golang程序需要整数类型 所以,如果我在源代码中使用uint16和uint32类型,它的成本会比使用大多数常规的int类型高吗 我正在考虑计算成本和开发成本。对于绝大多数情况,使用int更有意义。 以下是一些原因: Go不会在数字类型之间进行隐式转换,即使您认为它应该进行转换。如果您开始使用一些无符号类型而不是int,那么您应该期望在代码中添加多个类型转换,因为其他库或API不喜欢使用无符号类型,因为未类型化的常量数值表达式返回int值,等等 无符号类型比有符号类

我使用的是64位服务器。我的golang程序需要整数类型

所以,如果我在源代码中使用uint16和uint32类型,它的成本会比使用大多数常规的int类型高吗


我正在考虑计算成本和开发成本。

对于绝大多数情况,使用
int
更有意义。 以下是一些原因:

  • Go不会在数字类型之间进行隐式转换,即使您认为它应该进行转换。如果您开始使用一些无符号类型而不是
    int
    ,那么您应该期望在代码中添加多个类型转换,因为其他库或API不喜欢使用无符号类型,因为未类型化的常量数值表达式返回
    int
    值,等等
  • 无符号类型比有符号类型更容易下溢,因为0(无符号类型的边界值)在计算机程序中比-9223372036854775808更自然地出现
  • 如果您想使用无符号类型,因为它限制了您可以在其中输入的值,请记住,当您将静默下溢和仅编译时常量传播相结合时,您可能没有得到您想要的便宜货。例如,虽然无法将常量
    math.MinInt64
    转换为
    uint
    ,但可以轻松地将值为
    math.MinInt64
    int
    变量转换为
    uint
    。可以说,使用
    if
    检查您试图分配的值是否对您的程序有效并不是一种糟糕的Go风格
  • 除非您正在经历巨大的内存压力,并且您的值空间略高于较小的有符号类型所能提供的值空间,否则我认为使用
    int
    将更有效率,即使只是因为开发成本。
    即使如此,也有可能是程序内存占用的其他地方出现了问题,或者像Go这样的托管语言不是最适合您的需要。

    什么是“成本”?除非你储存了数十亿个这样的东西,并对它们进行了数十亿次的操作,否则我怀疑你是否会注意到它们之间的区别。使用任何表示法都可以覆盖您可能遇到的值。成本还包括开发人员编写代码行来转换源代码中的变量类型。如果您一直在转换,那么您选择了错误的类型。您可以查看这类计算。“我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源。”