定义一个常量会消耗一些内存吗?
我正在使用 Go 构建一个应用程序。
我需要为架构目的定义很多常量。就像我们有一个名为的部分posts,我想对其执行一些操作。其日志将以 类型保存在系统中posts。
问题
我有大约 50 个这样的部分。为了便于使用节类型,我想将节类型定义为常量。但是像变量一样在 Go 中消耗了一些空间,常量也是吗?我应该像这样定义它们用于多用途还是用posts字符串在任何地方引用类型。
我应该遵循什么来满足我的要求?
回答
定义一个常量会消耗一些内存吗?
不。
是的。呃,有点,但不是真的。
常量是 Go 中的编译时概念。这意味着它们在程序运行时实际上并不存在,所以从这个意义上说,不,它们不使用内存。
然而,通常常量并不存在于真空中。它们通常在您的代码中的某个地方使用。例如:
const defaultName = "Unnamed"
/* then later */
var name = defaultName
现在该变量name正在使用内存,并从常量 分配了一个值defaultName。所以常量本身并不使用内存,但引用常量的东西使用内存。您还可以创建许多(可能数以千计或更多)变量,它们都引用同一个常量,因此会使用很多倍的内存。
通常,您可以想象每个常量都被替换为其字面值。如果该文字值将“消耗内存”,则内存被消耗。
也就是说,这相当于上面的代码片段:
var name = "Unnamed"
因此,常量使用(或不使用)与文字值使用(或不使用)相同的内存。