Erro de compilação “variável declarada e não usada”
-
19-09-2019 - |
Pergunta
Estou aprendendo o novo idioma do Google Ir.Só estou tentando coisas e notei que, se você declarar uma variável e não fizer nada com ela o compilador Go (8g no meu caso) não consegue
compilar com este erro: hello.go:9: error declared and not used
.Fiquei surpreso com isso, já que a maioria dos compiladores de linguagem apenas avisar você sobre variáveis não utilizadas, mas ainda compiladas.
Existe alguma maneira de contornar isso?Verifiquei a documentação do compilador e não vejo nada que possa mudar esse comportamento.Existe uma maneira de simplesmente excluir error
para que isso seja compilado?
package main
import "fmt"
import "os"
func main()
{
fmt.Printf("Hello World\n");
cwd, error := os.Getwd();
fmt.Printf(cwd);
}
Solução
Você poderia tentar isso:
cwd, _ := os.Getwd();
mas parece que seria melhor manter o erro como na resposta de Jurily para saber se algo deu errado.
Outras dicas
isso pode tornar o desenvolvimento um pouco doloroso.às vezes eu executo código que tem variáveis declaradas mas não usadas (mas vai ser usado).
nesses casos eu simplesmente faço isso:
fmt.Printf("%v %v %v",algumvar1,algumvar2,algumvar3)
e aí, eles são “usados”.
gostaria de ver um sinalizador para as ferramentas Go que me permita suprimir esse erro durante o desenvolvimento.
Isto funciona?
cwd, error := os.Getwd();
if error == nil {
fmt.Printf(cwd);
}
Você pode descobrir qual é o erro importando "fmt" e usando
cwd, err := os.Getwd();
if err != nil {
fmt.Printf("Error from Getwd: %s\n", err)
}
O que ele imprime?
Se você realmente deseja apenas remover o erro de compilação, você pode tentar algo como 'a = a' ou 'error = error'.
Os argumentos vindos de algumas pessoas aqui, afirmando que tais erros de compilação são ótimos porque evitam muito lixo, são verdadeiros para a maioria das situações, portanto, você deve evitar tais construções.Por outro lado, gosto bastante de testar se o código que escrevo realmente compila!E nesse caso é bom não ter que remover todas as variáveis declaradas e não utilizadas.Portanto, use a construção 'a = a' raramente e não os deixe aí!
Eu tive a mesma situação que você.De documentos:
Posso interromper essas reclamações sobre minha variável/importação não utilizada?
A presença de uma variável não utilizada pode indicar um bug, enquanto as importações não utilizadas apenas retardam a compilação.Acumule importações não utilizadas suficientes em sua árvore de código e as coisas podem ficar muito lentas.Por essas razões, Go não permite nenhum dos dois.
Ao desenvolver código, é comum criar essas situações temporariamente e pode ser chato ter que editá-las antes da compilação do programa.
Alguns pediram uma opção do compilador para desativar essas verificações ou pelo menos reduzi-las a avisos.Essa opção não foi adicionada porque as opções do compilador não devem afetar a semântica da linguagem e porque o compilador Go não relata avisos, apenas erros que impedem a compilação.
Existem duas razões para não haver avisos.Primeiro, se vale a pena reclamar, vale a pena consertar no código.(E se não vale a pena consertar, não vale a pena mencionar.) Em segundo lugar, fazer com que o compilador gere avisos incentiva a implementação a alertar sobre casos fracos que podem tornar a compilação barulhenta, mascarando erros reais que deve ser consertado.
No entanto, é fácil resolver a situação.Use o identificador em branco para permitir que coisas não utilizadas persistam enquanto você desenvolve.
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. .... }