"переменная объявлена и не используется" ошибка компиляции

Я изучаю новый язык Google Go. Я просто пробую вещи, и я заметил что если вы объявляете переменную и ничего с ней не делаете, компилятор go ( 8g в моем случае) не
компиляция с этой ошибкой:hello.go:9: error declared and not used. Я был удивлен этим, так как большинство языковых компиляторов просто предупредить вы о неиспользуемых переменных, но все-таки скомпилировать.

- Это в любом случае я могу обойти это? Я проверил документацию для компилятора и я не вижу ничего, что могло бы изменить это поведение. Есть ли способ просто удалить error Так что это будет компилироваться?

package main

import "fmt"
import "os"

func main()
{
     fmt.Printf("Hello Worldn");
     cwd, error := os.Getwd();
     fmt.Printf(cwd);
}

6 ответов


вы можете попробовать это:

cwd, _ := os.Getwd();

но, похоже, было бы лучше сохранить ошибку, как в ответе Jurily, чтобы вы знали, Если что-то пошло не так.


Это может сделать развитие немного боли. иногда я запускаю код, который имеет переменные, объявленные, но не используемые (но будет использоваться).

в таких случаях я просто делаю это:

fmt.Printf ("%v %v %v", somevar1,somevar2,somevar3)

и там они "использовали".

Я хотел бы видеть флаг инструментов go, который позволяет мне подавлять эту ошибку при разработке.


это работает?

cwd, error := os.Getwd();
if error == nil {
    fmt.Printf(cwd);
}

вы можете узнать, что такое ошибка, импортировав " fmt " и используя

cwd, err := os.Getwd();
if err != nil {
    fmt.Printf("Error from Getwd: %s\n", err)
}

что он печатает?


Если вы действительно хотите удалить ошибку компиляции, вы можете попробовать что-то вроде "a = a" или "error = error".

аргументы, исходящие от некоторых людей здесь, заявляя, что такие ошибки компиляции велики, потому что они предотвращают много cruft, верны для большинства ситуаций, поэтому вы должны избегать таких конструкций. С другой стороны, мне очень нравится проверять, действительно ли код, который я пишу, компилируется! И в этом случае это хорошо, не нужно удалять все объявленные и неиспользуемые переменные. Так используйте конструкцию "a = a" редко и не оставляйте их там!


У меня была такая же ситуация как у вас. От docs:

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

наличие неиспользуемой переменной может указывать на ошибку, в то время как неиспользуемый импорт просто замедляет компиляцию. Накопите достаточно неиспользуемого импорта в дереве кода, и все может стать очень медленным. По этим причинам 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.
    ....
}