jjzjj

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

coder 2024-07-07 原文

这个有效:

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/

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

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 在 Ruby 中实现 `call_user_func_array` - 2

    我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)

  3. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  4. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  5. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  6. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  7. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  8. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  9. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  10. ruby - 为什么在 ruby​​ 中创建 Rational 不需要新方法 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?

随机推荐