Secara default, Go memperlakukan impor yang tidak digunakan sebagai kesalahan, memaksa Anda untuk menghapus impor. Saya ingin tahu apakah ada harapan untuk mengubah perilaku ini, misalnya menguranginya menjadi peringatan.
Saya menemukan masalah ini sangat mengganggu, mencegah saya menikmati pengkodean di Go.
Misalnya, saya menguji beberapa kode, menonaktifkan segmen / fungsi. Beberapa fungsi dari lib tidak lagi digunakan (misalnya fmt, error, apa pun), tetapi saya perlu mengaktifkan kembali fungsi tersebut setelah sedikit pengujian. Sekarang program tidak dapat dikompilasi kecuali saya menghapus impor tersebut, dan beberapa menit kemudian saya perlu mengimpor ulang lib.
Saya melakukan proses ini berulang kali saat mengembangkan program GAE.
var _ = <module>.Function
berfungsi dengan baik dan cukup mencolok untuk mencegahnya menjadi praktik umum.goimports
sebagai langkah dalam proses pembuatan Anda. Tanpa salah satu dari mereka itu menjadi tua sangat cepat.Jawaban:
Menambahkan garis bawah (
_
) sebelum nama paket akan mengabaikan kesalahan impor yang tidak digunakan.Berikut adalah contoh bagaimana Anda dapat menggunakannya:
Lihat selengkapnya di https://golang.org/ref/spec#Import_declarations
sumber
_
(jika tidak, paket tidak dapat direferensikan, karena tidak memiliki nama). Jika Anda akan melakukan itu, Anda mungkin juga hanya memberi komentar / menghapus komentar. Thevar _ = ...
trick tidak memiliki masalah ini."fmt"
di Gogland, itu secara otomatis menambahkan"fmt"
sehingga Anda memiliki keduanya_"fmt"
dan"fmt"
, yang menjadikannya tidak berguna di IDE iniThe
var _ = fmt.Printf
Trik ini berguna di sini.sumber
import
pernyataan dan kembali ketika Anda hanya mencoba untuk mengkompilasi atau menguji beberapa file kode yang Anda susun secara berulang .Saya memiliki masalah yang sama. Saya memahami alasan mengapa mereka menerapkan bahasa untuk melarang impor dan variabel yang tidak digunakan, tetapi menurut saya fitur ini mengganggu saat menulis kode saya. Untuk menyiasati ini, saya mengubah kompiler saya untuk mengizinkan flag opsional untuk mengizinkan variabel yang tidak digunakan dan impor dalam kode saya.
Jika Anda tertarik, Anda dapat melihatnya di https://github.com/dtnewman/modified_golang_compiler .
Sekarang, saya cukup menjalankan kode dengan perintah seperti go run -gcflags '-unused_pkgs' test.go dan tidak akan menampilkan kesalahan "impor yang tidak digunakan" ini. Jika saya mengabaikan flag ini, maka kembali ke default untuk tidak mengizinkan impor yang tidak digunakan.
Melakukan ini hanya membutuhkan beberapa perubahan sederhana. Go purists mungkin tidak akan senang dengan perubahan ini karena ada alasan bagus untuk tidak mengizinkan variabel / impor yang tidak digunakan, tetapi saya pribadi setuju dengan Anda bahwa masalah ini membuatnya kurang menyenangkan untuk membuat kode di Go, itulah sebabnya saya membuat perubahan ini pada saya. penyusun.
sumber
go run main.go
menonaktifkan kesalahan secara default, sementarago build
mengaktifkan kesalahan. Dengan begitu, mudah untuk dikembangkan menggunakango run
dan ketika saatnya membangun untuk produksi, Anda masih dipaksa untuk membersihkan kode Anda.Gunakan goimports . Ini pada dasarnya adalah garpu
gofmt
, yang ditulis oleh Brad Fitzpatrick dan sekarang termasuk dalam paket alat go. Anda dapat mengkonfigurasi editor Anda untuk menjalankannya setiap kali Anda menyimpan file. Anda tidak perlu mengkhawatirkan masalah ini lagi.sumber
Jika Anda menggunakan
fmt
paket untuk pencetakan umum ke konsol saat Anda mengembangkan dan menguji maka Anda mungkin menemukan solusi yang lebih baik dalam paket log .sumber
println
yang sepertinya selalu dilupakan orang.println
?? Ini berita baru bagiku. Apakah itu tidak berdokumen? Saya tidak dapat menemukannya di mana pun.fmt
paket untuk logging, tidak menyadari bahwa ada paket logging yang sudah jadi.Gunakan
if false { ... }
untuk mengomentari beberapa kode. Kode di dalam tanda kurung harus benar secara sintaksis, tetapi bisa juga kode yang tidak masuk akal jika tidak.sumber
Banyak orang telah berkomentar dengan justifikasi yang valid dan saya juga mengakui niat penulis asli. Namun, Rob Pike menyebutkan di berbagai forum bahwa Go adalah hasil dari penyederhanaan proses yang tidak dimiliki atau tidak mudah dicapai oleh beberapa bahasa pemrograman utama lainnya. Itu semantik bahasa Go dan juga untuk mempercepat kompilasi, banyak hal yang diadopsi yang awalnya terkesan tidak efisien.
Singkatnya, impor yang tidak terpakai dianggap sebagai kesalahan di Go karena program tersebut tidak berfungsi dan memperlambat kompilasi. Menggunakan impor untuk efek samping (_) adalah solusi, namun, saya merasa ini membingungkan pada saat ada campuran impor yang valid dengan efek samping bersama dengan efek samping yang diimpor murni untuk tujuan debugging / pengujian terutama ketika basis kode adalah besar dan ada kemungkinan untuk melupakan dan tidak menghapus secara tidak sengaja yang dapat membingungkan teknisi / pengulas lain nanti. Saya biasa mengomentari yang tidak terpakai, namun, IDE populer seperti kode VS dan Goland dapat digunakan
goimports
dengan mudah yang melakukan penyisipan dan penghapusan impor dengan cukup baik. Silakan merujuk ke tautan untuk info lebih lanjut, https://golang.org/doc/effective_go.html#blank_importsumber
import _ "net/http/pprof"
letakkan ini di atas dokumen Anda dan lupakan impor yang tidak digunakan:
sumber
_
variabel global sebagai gantinya (misalnya satu paket per baris atau jika Anda bersikeras, semuanya sepertivar _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs
:). Tapi jangan lakukan ini, gunakan sajagoimports
.