在 Go 中,是否可以在不需要星号取消引用的情况下将变量分配给 someArray[someIndex]?

In Go, is it possible to assign a variable to someArray[someIndex] without needing an asterisk to dereference?

这个有效:

pressure := &dataDump[845]
CurrentPressure := *pressure

但是有没有办法更改第一行,使 pressure 成为 dataDump[845] 的别名,因此不需要星号:

CurrentPressure := pressure

对于"changing"数据

"changing" 数据我的意思是如果 dataDump 数组/切片发生变化,您希望 pressure 反映这些变化。

这在 Go 中是不可能的。您想要的是明确指定要创建/放置变量的内存地址。

您最好的选择是使用您在问题中包含的指针。

另一种方法是创建一个函数,例如:

function pressure() int {
    return dataDump[845]
}

并使用它:

currentPressure := pressure()

对于"static"数据

如果dataDump获得后没有变化,那么这不是问题。您可以像这样使用一个简单的非指针变量:

pressure := dataDump[845] // Not a pointer to the element but a copy of it

然后:

currentPressure := pressure

但是在这种情况下甚至不需要 currentPressure,您可以只使用 pressure(或者首先将其命名为 currentPressure)。

使用内存布局

我不知道您是如何获取数据的,但在某些情况下,可以在您希望放置/解组数据的位置提供 Go 值。这种情况可能是从文件中读取数据,也可能是从 TCP 连接中读取数据。

如果是这种情况,您可以使用struct仔细规划您获取的数据的内存布局,然后您可以使用可以声明为非指针的结构字段。

示例:

type dataDump struct {
    _ [845]int32 // Some unused data

    pressure int32
}

如果你可以"unmarshal"你的数据到这个结构的值,那么你可以这样获取当前压力:

dump := dataDump{}
// Unmarshal into dump
currentPressure := dump.pressure

如果您往下走,请注意Spec: Size and alignment guarantees。由于隐式对齐,必须小心!

有关布局内存的更多详细信息,请参阅相关问题: