在 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。由于隐式对齐,必须小心!
有关布局内存的更多详细信息,请参阅相关问题:
这个有效:
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。由于隐式对齐,必须小心!
有关布局内存的更多详细信息,请参阅相关问题: