"переменная объявлена и не используется" ошибка компиляции
Я изучаю новый язык Google Go. Я просто пробую что-то, и я заметил, что если вы объявляете переменную и ничего с ней не делаете, компилятору go (в моем случае8g) не удается
скомпилировать с этой ошибкой: hello.go:9: error declared and not used
, Я был удивлен этим, так как большинство языковых компиляторов просто предупреждают вас о неиспользуемых переменных, но все же компилируют.
Есть ли в любом случае я могу обойти это? Я проверил документацию для компилятора и не вижу ничего, что могло бы изменить это поведение. Есть ли способ просто удалить error
так что это скомпилирует?
package main
import "fmt"
import "os"
func main()
{
fmt.Printf("Hello World\n");
cwd, error := os.Getwd();
fmt.Printf(cwd);
}
8 ответов
Вы можете попробовать это:
cwd, _ := os.Getwd();
но кажется, что было бы лучше сохранить ошибку, как в ответе Джурили, чтобы вы знали, если что-то пошло не так.
Это может сделать развитие немного болезненным. иногда я запускаю код, который имеет объявленные переменные, но не используется (но будет использоваться).
в этих случаях я просто делаю это:
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)
}
Что это печатает?
У меня была такая же ситуация, как и у вас. Из документов:
Могу ли я прекратить эти жалобы по поводу моей неиспользованной переменной / импорта?
Наличие неиспользуемой переменной может указывать на ошибку, в то время как неиспользуемый импорт просто замедляет компиляцию. Накопите достаточно неиспользованных импортов в вашем дереве кода, и все может стать очень медленным. По этим причинам 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. .... }
Вы можете решить проблему неиспользуемых переменных, следуя одному из этих двух методов.
Решив ошибку
cwd, error:= os.Getwd() if error!=nil{fmt.Println(error)}
Здесь нам не нужно было само значение, поэтому мы проигнорировали его с пустым идентификатором «_».
cwd, _:= os.Getwd()
Если вы действительно хотите удалить ошибку компиляции, вы можете попробовать что-то вроде "a = a" или "error = error".
Аргументы, исходящие от некоторых здесь присутствующих, утверждающих, что такие ошибки компиляции велики, потому что они предотвращают много путаницы, верны для большинства ситуаций, поэтому вам следует избегать таких конструкций. С другой стороны, мне очень нравится проверять, действительно ли код, который я пишу, компилируется! И в этом случае это хорошо, не нужно удалять все объявленные и неиспользованные переменные. Так что используйте конструкцию 'a = a' редко и не оставляйте их там!
Вы можете решить проблему неиспользуемых переменных, следуя одному из этих двух методов.
Решив ошибку
cwd, error:= os.Getwd()if error!= nil {fmt.Println(error)}
Здесь нам не нужно было само значение, поэтому мы проигнорировали его с пустым идентификатором «_».
cwd, _:= os.Getwd()