De forma predeterminada, Go trata la importación no utilizada como un error, lo que le obliga a eliminar la importación. Quiero saber si existe alguna esperanza de cambiar este comportamiento, por ejemplo, reducirlo a una advertencia.
Este problema me resulta extremadamente molesto, lo que me impide disfrutar de la codificación en Go.
Por ejemplo, estaba probando un código, deshabilitando un segmento / función. Algunas funciones de una biblioteca ya no se usan (por ejemplo, fmt, errores, lo que sea), pero necesitaré volver a habilitar la función después de algunas pruebas. Ahora el programa no se compilará a menos que elimine esas importaciones, y unos minutos más tarde necesito volver a importar la lib.
Estaba haciendo este proceso una y otra vez cuando desarrollaba un programa GAE.
var _ = <module>.Function
funciona bien y es lo suficientemente llamativo como para evitar que sea una práctica común.goimports
como paso en su proceso de compilación. Sin ninguno de ellos, envejece muy rápido.Respuestas:
Agregar un guión bajo (
_
) antes del nombre de un paquete ignorará el error de importación no utilizado.Aquí hay un ejemplo de cómo podría usarlo:
Ver más en https://golang.org/ref/spec#Import_declarations
fuente
_
(de lo contrario, no se puede hacer referencia al paquete, ya que no tiene nombre). Si vas a hacer eso, también puedes comentarlo / descomentarlo. Elvar _ = ...
truco no tiene este problema."fmt"
en Gogland, se agrega automáticamente"fmt"
para que tenga ambos_"fmt"
y"fmt"
, lo que lo hace inútil en este IDEEl
var _ = fmt.Printf
truco es útil aquí.fuente
import
declaración y regresar cuando solo está tratando de compilar o probar algún archivo de código que está desarrollando iterativamente .Tengo el mismo problema. Entiendo el razonamiento de por qué implementaron el lenguaje para no permitir las importaciones y variables no utilizadas, pero personalmente encuentro esta característica molesta al escribir mi código. Para evitar esto, cambié mi compilador para permitir indicadores opcionales para permitir variables e importaciones no utilizadas en mi código.
Si está interesado, puede verlo en https://github.com/dtnewman/modified_golang_compiler .
Ahora, puedo simplemente ejecutar código con un comando como go run -gcflags '-unused_pkgs' test.go y no arrojará estos errores de "importación no utilizada". Si omito estos indicadores, vuelve al valor predeterminado de no permitir importaciones no utilizadas.
Hacer esto solo requirió unos pocos cambios simples. Los puristas de Go probablemente no estarán contentos con estos cambios, ya que hay una buena razón para no permitir las variables / importaciones no utilizadas, pero personalmente estoy de acuerdo con usted en que este problema hace que sea mucho menos agradable codificar en Go, por lo que hice estos cambios en mi compilador.
fuente
go run main.go
deshabilite los errores de forma predeterminada, mientrasgo build
que los habilita. De esa manera, es fácil de desarrollar usandogo run
y cuando llega el momento de construir para producción, todavía se ve obligado a limpiar su código.Utilice goimports . Es básicamente una bifurcación de
gofmt
, escrita por Brad Fitzpatrick y ahora incluida en los paquetes de herramientas de Go. Puede configurar su editor para ejecutarlo siempre que guarde un archivo. Nunca más tendrás que preocuparte por este problema.fuente
Si está utilizando el
fmt
paquete para la impresión general en la consola mientras desarrolla y prueba, puede encontrar una mejor solución en el paquete de registro .fuente
println
que la gente siempre parece olvidar.println
?? Esto es nuevo para mí. ¿Es indocumentado? No puedo encontrarlo por ninguna parte.fmt
paquete para el registro, sin saber que había un paquete de registro listo para usar .Úselo
if false { ... }
para comentar algún código. El código entre llaves debe ser sintácticamente correcto, pero de lo contrario puede ser un código sin sentido.fuente
Mucha gente ya ha comentado con justificación válida y también reconozco la intención del autor original. Sin embargo, Rob Pike mencionó en diferentes foros que Go es el resultado de la simplificación de los procesos que algunos otros lenguajes de programación convencionales carecen o no son fáciles de lograr. Es la semántica del lenguaje de Go, además de hacer la compilación más rápida, hay muchas cosas que se adoptan que inicialmente parecen ineficientes.
Para abreviar, las importaciones no utilizadas se consideran errores en Go, ya que borra el programa y ralentiza la compilación. Usar la importación para efectos secundarios (_) es una solución alternativa, sin embargo, encuentro esto confuso en ocasiones cuando hay una combinación de importaciones válidas con efectos secundarios junto con efectos secundarios importados únicamente con el propósito de depurar / probar, especialmente cuando la base del código es grande y existe la posibilidad de olvidar y no eliminar involuntariamente, lo que puede confundir a otros ingenieros / revisores más adelante. Solía comentar los no utilizados, sin embargo, los IDE populares como el código VS y Goland se pueden usar
goimports
fácilmente, lo que hace que la inserción y eliminación de las importaciones sea bastante buena. Consulte el enlace para obtener más información, https://golang.org/doc/effective_go.html#blank_importfuente
import _ "net/http/pprof"
ponga esto en la parte superior de su documento y olvídese de las importaciones no utilizadas:
fuente
_
variables globales en su lugar (por ejemplo, un paquete por línea o si insiste, todos juntos como :)var _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs
. Pero no hagas esto, solo usagoimports
.