Por padrão, Go trata a importação não utilizada como erro, forçando você a excluir a importação. Quero saber se existe alguma esperança de mudar esse comportamento, por exemplo, reduzindo-o a aviso.
Acho esse problema extremamente chato, me impedindo de gostar de programar em Go.
Por exemplo, eu estava testando algum código, desativando um segmento / função. Algumas funções de um lib não são mais usadas (por exemplo, fmt, erros, qualquer coisa), mas vou precisar reativar a função após alguns testes. Agora, o programa não compilará a menos que eu remova essas importações e, alguns minutos depois, preciso reimportar a lib.
Eu estava fazendo esse processo repetidamente ao desenvolver um programa GAE.
var _ = <module>.Function
funciona bem e é visível o suficiente para evitar que seja uma prática comum.goimports
como uma etapa em seu processo de construção. Sem qualquer um deles, envelhece muito rápido.Respostas:
Adicionar um sublinhado (
_
) antes de um nome de pacote irá ignorar o erro de importação não utilizado.Aqui está um exemplo de como você pode usá-lo:
Veja mais em https://golang.org/ref/spec#Import_declarations
fonte
_
(caso contrário, o pacote não pode ser referenciado, pois não tem nome). Se você vai fazer isso, você pode apenas comentar / descomentar. Ovar _ = ...
truque não tem esse problema."fmt"
no Gogland, ele adicionará automaticamente"fmt"
para que você tenha ambos_"fmt"
e"fmt"
, o que o torna inútil neste IDEO
var _ = fmt.Printf
truque é útil aqui.fonte
import
instrução e voltar quando você está apenas tentando compilar ou testar algum arquivo de código que você está desenvolvendo iterativamente .Eu tenho o mesmo problema. Eu entendo o motivo pelo qual eles implementaram a linguagem para proibir importações e variáveis não utilizadas, mas pessoalmente acho esse recurso irritante ao escrever meu código. Para contornar isso, mudei meu compilador para permitir sinalizadores opcionais para permitir variáveis não utilizadas e importações em meu código.
Se estiver interessado, você pode ver isso em https://github.com/dtnewman/modified_golang_compiler .
Agora, posso simplesmente executar o código com um comando como go run -gcflags '-unused_pkgs' test.go e ele não gerará esses erros de "importação não utilizada". Se eu deixar de fora essas sinalizações, ele retorna ao padrão de não permitir importações não utilizadas.
Fazer isso exigiu apenas algumas mudanças simples. Os puristas do Go provavelmente não ficarão felizes com essas mudanças, pois há um bom motivo para não permitir variáveis / importações não utilizadas, mas eu pessoalmente concordo com você que esse problema torna muito menos agradável codificar no Go, e é por isso que fiz essas alterações no meu compilador.
fonte
go run main.go
desabilitar os erros por padrão, enquantogo build
habilita os erros. Dessa forma, é fácil desenvolver usandogo run
e, quando é hora de construir para produção, você ainda é forçado a limpar seu código.Use goimports . É basicamente um fork do
gofmt
, escrito por Brad Fitzpatrick e agora incluído nos pacotes de ferramentas go. Você pode configurar seu editor para executá-lo sempre que salvar um arquivo. Você nunca mais terá que se preocupar com esse problema.fonte
Se você estiver usando o
fmt
pacote para impressão geral para o console enquanto desenvolve e testa, você pode encontrar uma solução melhor no pacote de log .fonte
println
que as pessoas sempre parecem esquecer.println
?? Isso é novidade para mim. É não documentado? Não consigo encontrar em lugar nenhum.fmt
pacote para registro, sem saber que havia um pacote de registro pronto.Use
if false { ... }
para comentar algum código. O código entre colchetes deve ser sintaticamente correto, mas pode ser um código sem sentido de outra forma.fonte
Muitas pessoas já comentaram com justificativas válidas e também reconheço a intenção do autor original. No entanto, Rob Pike mencionou em diferentes fóruns que Go é o resultado da simplificação dos processos que algumas outras linguagens de programação convencionais não têm ou não são fáceis de alcançar. É a semântica da linguagem Go, além de tornar a compilação mais rápida, há uma série de coisas que são adotadas que inicialmente parecem ineficientes.
Para resumir, as importações não utilizadas são consideradas erros no Go, pois isso mata o programa e torna a compilação mais lenta. Usar importação para efeito colateral (_) é uma solução alternativa, no entanto, acho isso confuso às vezes quando há uma mistura de importações válidas com efeitos colaterais junto com efeitos colaterais importados exclusivamente para fins de depuração / teste, especialmente quando a base de código é grande e há uma chance de esquecer e não excluir acidentalmente, o que pode confundir outros engenheiros / revisores posteriormente. Eu costumava comentar os não usados, no entanto, IDEs populares como o código VS e Goland podem usar
goimports
facilmente, o que faz a inserção e exclusão de importações muito bem. Consulte o link para obter mais informações, https://golang.org/doc/effective_go.html#blank_importfonte
import _ "net/http/pprof"
coloque isso no topo do seu documento e esqueça as importações não utilizadas:
fonte
_
variáveis globais (por exemplo, um pacote por linha ou se você insistir, todos juntos comovar _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs
:). Mas não faça isso, apenas usegoimports
.