Перейти язык предупреждений и ошибок - PullRequest
10 голосов
/ 15 августа 2011

Кажется, что в языке GO нет предупреждений.Я наблюдал несколько случаев.1. «объявлено и не используется» (если переменная объявлена ​​и нигде не используется, это приводит к ошибке и не компилируется программа) 2. «импортировано и не используется» (аналогично, если пакет импортирован и не используется где-либо, выдается ошибкаи не компилирует программу) Может кто-нибудь помочь.Если у них есть указатели.

Ответы [ 3 ]

13 голосов
/ 15 августа 2011

Язык программирования Go FAQ

Могу ли я прекратить эти жалобы по поводу моей неиспользованной переменной / импорта?

Наличие неиспользуемой переменной может указывать на ошибку, пока она не используется импорт просто замедляет компиляцию. Накопить достаточно неиспользованного импорта в вашем коде дерева, и все может быть очень медленно. По этим причинам, Go не позволяет ни того, ни другого.

При разработке кода такие ситуации обычно создаются временно, и это может быть раздражающим, чтобы отредактировать их до Программа скомпилируется.

Некоторые просили опцию компилятора, чтобы отключить эти проверки или хотя бы свести их к предупреждениям. Такая опция не была добавлена, хотя, потому что параметры компилятора не должны влиять на семантику язык и потому, что компилятор Go не сообщает о предупреждениях, только ошибки, мешающие компиляции.

Есть две причины отсутствия предупреждений. Во-первых, если оно того стоит жаловаться, стоит исправить в коде. (И если это не Стоит исправить, не стоит упоминать.) Во-вторых, имея компилятор генерировать предупреждения поощряет реализацию предупреждать о слабых случаи, которые могут сделать компиляцию шумной, маскируя реальные ошибки, которые должны быть исправленным.

Впрочем, разобраться с ситуацией легко. Используйте пустой идентификатор позволить неиспользованным вещам сохраняться во время вашего развития.

import "unused"

// This declaration marks the import as used by referencing an
// item from the package.
var _ = unused.Item  // TODO: Delete before committing!

func main() {
    debugData := debug.Profile()
    _ = debugData // Used only during debugging.
    ....
}
13 голосов
/ 15 августа 2011

Го пытается предотвратить эту ситуацию:

Мальчик курит и оставляет в воздухе дымовые кольца.Девочка раздражается от дыма и говорит своему возлюбленному: «Разве вы не видите предупреждение, написанное на пачке сигарет, курение вредно для здоровья!»

Мальчик отвечает в ответ: «Дорогой, япрограммист. Мы не беспокоимся о предупреждениях, мы беспокоимся только об ошибках. "

По сути, Go просто не позволит вам избавиться от неиспользуемых переменных и неиспользуемых импортов и других вещей, которые обычно являются предупреждением.на других языках.Это помогает вам обрести хорошую привычку.

1 голос
/ 28 января 2014

Одним из решений для неиспользованного импорта является использование goimports, который является форком gofmt. Он автоматически добавляет отсутствующие импорта и удаляет неиспользуемые (в дополнение к форматированию вашего кода).

http://godoc.org/code.google.com/p/go.tools/cmd/goimports

Я настроил мой редактор для автоматического запуска goimports при каждом сохранении кода. Теперь я не могу представить, как писать код без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...