gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:44 26 4
gpt4 key购买 nike

这个有效:

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

但是有没有办法改变第一行,使 pressure 成为 dataDump[845] 的别名,这样就不需要星号了:

CurrentPressure := pressure

最佳答案

用于“改变”数据

我所说的“更改”数据是指如果 dataDump 数组/slice 发生变化,您希望您的 pressure 反射(reflect)这些变化。

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

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

另一种选择是创建一个函数,例如:

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

并使用它:

currentPressure := pressure()

对于“静态”数据

如果 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
}

如果您可以将您的数据“解码”为该结构的值,那么您可以像这样获取当前压力:

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

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

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

Why use arrays instead of slices?

Why have arrays in Go?

关于arrays - 在 Go 中,是否可以在不需要星号取消引用的情况下将变量分配给 someArray[someIndex]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com