Standardmäßig behandelt Go nicht verwendeten Import als Fehler und zwingt Sie, den Import zu löschen. Ich möchte wissen, ob es Hoffnung gibt, dieses Verhalten zu ändern, z. B. es auf Warnung zu reduzieren.
Ich finde dieses Problem äußerst ärgerlich und hindere mich daran, das Codieren in Go zu genießen.
Zum Beispiel habe ich Code getestet und ein Segment / eine Funktion deaktiviert. Einige Funktionen aus einer Bibliothek werden nicht mehr verwendet (z. B. fmt, Fehler usw.), aber ich muss die Funktion nach einigem Testen wieder aktivieren. Jetzt wird das Programm erst kompiliert, wenn ich diese Importe entferne, und einige Minuten später muss ich die Bibliothek erneut importieren.
Ich habe diesen Prozess immer wieder gemacht, als ich ein GAE-Programm entwickelt habe.
var _ = <module>.Function
funktioniert einwandfrei und ist auffällig genug, um zu verhindern, dass es eine gängige Praxis ist.goimports
als Schritt in Ihrem Erstellungsprozess. Ohne beides wird es sehr schnell alt.Antworten:
Durch Hinzufügen eines Unterstrichs (
_
) vor einem Paketnamen wird der nicht verwendete Importfehler ignoriert.Hier ist ein Beispiel, wie Sie es verwenden könnten:
Weitere Informationen finden Sie unter https://golang.org/ref/spec#Import_declarations
quelle
_
(andernfalls kann auf das Paket nicht verwiesen werden, da es keinen Namen hat). Wenn Sie das tun, können Sie es auch einfach kommentieren / auskommentieren. Dervar _ = ...
Trick hat dieses Problem nicht."fmt"
in Gogland hinzufügen, wird er automatisch hinzugefügt,"fmt"
sodass Sie beide_"fmt"
und haben"fmt"
, was ihn in dieser IDE unbrauchbar machtDer
var _ = fmt.Printf
Trick ist hier hilfreich.quelle
import
Anweisung und zurück zu gelangen, wenn Sie nur versuchen, zu kompilieren oder zu testen eine Codedatei, die Sie iterativ ausarbeiten.Ich habe das gleiche Problem. Ich verstehe die Gründe, warum sie die Sprache implementiert haben, um nicht verwendete Importe und Variablen nicht zuzulassen, aber ich persönlich finde diese Funktion beim Schreiben meines Codes ärgerlich. Um dies zu umgehen, habe ich meinen Compiler geändert, um optionale Flags zum Zulassen nicht verwendeter Variablen und Importe in meinen Code zuzulassen.
Wenn Sie interessiert sind, können Sie dies unter https://github.com/dtnewman/modified_golang_compiler sehen .
Jetzt kann ich einfach Code mit einem Befehl wie go run -gcflags '-unused_pkgs' test.go ausführen und diese "nicht verwendeten Import" -Fehler werden nicht ausgelöst . Wenn ich diese Flags weglasse, wird standardmäßig nicht verwendete Importe nicht zugelassen.
Dies erforderte nur ein paar einfache Änderungen. Go-Puristen werden mit diesen Änderungen wahrscheinlich nicht zufrieden sein, da es gute Gründe gibt, nicht verwendete Variablen / Importe nicht zuzulassen, aber ich stimme Ihnen persönlich zu, dass dieses Problem das Codieren in Go viel weniger angenehm macht, weshalb ich diese Änderungen an meinem vorgenommen habe Compiler.
quelle
go run main.go
die Fehler standardmäßig deaktiviert und die Fehler aktiviertgo build
werden. Auf diese Weise ist es einfach zu entwickelngo run
und wenn es Zeit für die Produktion ist, müssen Sie Ihren Code immer noch bereinigen.Verwenden Sie Goimports . Es ist im Grunde eine Gabelung von
gofmt
, geschrieben von Brad Fitzpatrick und jetzt in den Go-Tools-Paketen enthalten. Sie können Ihren Editor so konfigurieren, dass er beim Speichern einer Datei ausgeführt wird. Sie müssen sich nie wieder um dieses Problem kümmern.quelle
Wenn Sie das
fmt
Paket für den allgemeinen Druck zur Konsole verwenden, während Sie es entwickeln und testen, finden Sie möglicherweise eine bessere Lösung im Protokollpaket .quelle
println
die Leute immer zu vergessen scheinen.println
? Das sind Neuigkeiten für mich. Ist es nicht dokumentiert? Ich kann es nirgendwo finden.fmt
Paket für die Protokollierung verwendete, ohne zu wissen, dass es ein vorgefertigtes Protokollierungspaket gab.Verwenden Sie
if false { ... }
diese Option, um Code auskommentieren zu können . Der Code in geschweiften Klammern muss syntaktisch korrekt sein, kann aber ansonsten Unsinncode sein.quelle
Viele Leute haben bereits mit berechtigter Begründung kommentiert, und ich erkenne auch die Absicht des ursprünglichen Autors an. Rob Pike erwähnte jedoch in verschiedenen Foren, dass Go das Ergebnis einer Vereinfachung der Prozesse ist, die einigen anderen gängigen Programmiersprachen entweder fehlen oder nicht einfach zu erreichen sind. Es ist Go's Sprachsemantik und um die Kompilierung zu beschleunigen, werden viele Dinge übernommen, die zunächst ineffizient erscheinen.
Um es kurz zu machen, nicht verwendete Importe werden in Go als Fehler betrachtet, da das Programm gelöscht und die Kompilierung verlangsamt wird. Die Verwendung des Imports für Nebenwirkungen (_) ist eine Problemumgehung. Ich finde dies jedoch verwirrend, wenn es eine Mischung aus gültigen Importen mit Nebenwirkungen und Nebenwirkungen gibt, die nur zum Debuggen / Testen importiert wurden, insbesondere wenn die Codebasis verwendet wird groß und es besteht die Möglichkeit, dass Sie vergessen und nicht unbeabsichtigt löschen, was andere Ingenieure / Prüfer später verwirren kann. Früher habe ich die nicht verwendeten auskommentiert, aber beliebte IDEs wie VS-Code und Goland können
goimports
problemlos verwendet werden, was das Einfügen und Löschen der Importe ziemlich gut macht. Weitere Informationen finden Sie unter https://golang.org/doc/effective_go.html#blank_importquelle
import _ "net/http/pprof"
Legen Sie dies auf Ihr Dokument und vergessen Sie nicht verwendete Importe:
quelle
_
stattdessen globale Variablen (z. B. entweder ein Paket pro Zeile oder wenn Sie darauf bestehen, alles zusammen wie :)var _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs
. Aber tu das nicht, benutze es einfachgoimports
.