2015-09-30 3 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

Смежные вопросы