2015-09-30 171 views
-3

我对Go很新,我想将这个代码片段变成函数。向函数中输入变量名

基本上,我想知道是否有传递一个变量名到一个函数调用,所以如果我叫一个可行的办法:

changeColor(varName)

它会跑,然后分配一个新的值到输入到函数调用中的原始变量。

希望这是有道理的,并在此先感谢

if varName == yellow { 
    varName = black 
} else { 
    varName = yellow 
} 
+3

你可以使用指针来做到这一点。 https://tour.golang.org/moretypes/1 – Snowman

+1

这似乎将在基本文档中得到很好的介绍。您应该先从这里开始:https://golang.org/doc/ – JimB

+0

由于文档对于新手来说可能有点陡峭,这是一个非常简单而全面的关于使用Go的基础知识的文本:https:// www。 golang-book.com/books/intro/8 – Snowman

回答

3

您可以了解一般概念是由不同的Evaluation Strategies是编程语言采用读了。在Go中,您可以通过指针实现您正在查找的行为。

如果没有指针,通常会传递变量的副本。使用指针,您将传递内存中值位置的副本。这意味着该功能可以修改已了解的位置的实际值。

下面是一个例子,做你解释什么:

http://play.golang.org/p/ufrEjmXwmB

请记住,这可能不是一个真正的程序要做到这一点的最好办法。如果重点只是学习,那就去做吧。尝试使用指针指针传递指针等等:p

+2

对不起,在这样的初学者问题上进入语义学,但由于“通过引用传递”没有很好地定义(除了像C++这样的语言,称为“引用” ),我们大多数人都喜欢避开Go这个词。 go中的所有东西都是按值传递的,包括指针,其中指针*值*被复制到参数变量中。 – JimB

+0

感谢提醒@JimB。我已经更新了我的答案,以获得更正确的语言。据我所知,在传统的comp-sci教科书中,“通过引用”是明确定义的,尽管我确实在这里错误地使用了它。如果答案仍然关闭,请随时编辑,我不会冒犯:p –

+0

是的,也许这个术语在学术意义上是明确定义的,但通俗地说它经常被错误地使用(例如,看看wiki文章你在“通过共享呼叫”下面链接,其中列出了红宝石计数器以及社区声称它是“通过引用”)。 – JimB