2014-11-26 2 views
4

Исходя из фона в Java и C# Я очень доволен краткостью способности Golang на использование метода быстрого доступа для объявления переменных для частных переменных внутри функций, что позволяет мне писать:Объявление переменной Ярлык вне функции

x := 1.5 

Это напоминает мне утиную печать на динамическом языке, таком как Python. Однако, в объявлении глобальных переменных за пределами сферы действия функции вы по-прежнему необходимо использовать более подробный синтаксис:

var x float64 = 1.5 

Я просто интересно, почему метод работает ярлык для частных переменных и не глобал? Я знаю, что разработчики языка достаточно опытные, поэтому я предполагаю, что это не отражает недостающую особенность. Есть ли техническая причина, почему такой тип вывода (и я понимаю, что: = ярлык не совпадает с правильным типом вывода) не будет работать в глобальной области? Это просто кажется несколько противоречивым с точки зрения дизайна, и как неопытный Гофер, я должен признать, что его отбрасывают пару раз. В целом, однако, я действительно наслаждаюсь Go.

+0

Потому что все объявления уровня пакета начинаются с ключевого слова (импорт, тип, func, const, var и т. Д.). – thwd

+0

@divan. Вы правы, похоже, это по тому же пути, что и мой вопрос. Я искал, прежде чем спрашивать об этом, но почему-то не столкнулся с этим. Извинения за дублирование. Я бы удалил свой вопрос, но теперь есть ответы, поэтому я не думаю, что это возможно. Я уверен, что он будет отмечен как дубликат в ближайшее время. – user1503949

ответ

5

См ответа на Яне в этой теме: https://groups.google.com/forum/#!msg/golang-nuts/qTZemuGDV6o/IyCwXPJsUFIJ

На верхнем уровне, каждая декларация начинается с ключевым словом. Этот упрощает синтаксический анализ.

+4

И [эта тема] (https://groups.google.com/forum/#!msg/golang-nuts/OqYL9lgsPQ4/udp0nPHPZTgJ) для некоторой дополнительной информации: На верхнем уровне var (или const или type или func): каждый элемент должен быть введен ключевым словом для ур-синтаксических причин, связанных с распознаванием границ инструкции. С более поздними изменениями, включающими точки с запятой, стало возможным, я полагаю, устранить необходимость var в некоторых случаях, но поскольку константа, тип и func должны оставаться, это не является убедительным аргументом. – Makpoc

1

На самом деле вам не нужно указывать тип во многих случаях.

var x = 1.5 

должен работать нормально. Это, вероятно, так короче, как может быть, и это не намного длиннее, чем локальная переменная. Итак, есть ярлык для глобального.

Как почему := не может быть использована, я бы предположил, что взывает var делает структуру кода более последовательно, как и другие глобальные конструкции начинаются с ключевым словом - func, const, import, type.

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