私はGoを学習していますが、コンパイルするときに変数やパッケージを未使用のままにしてはいけないのは少し面倒です。
これは本当に私をかなり遅くしています。たとえば、新しいパッケージを宣言して後で使用するか、テストするコマンドのコメントを外したいだけです。私はいつもエラーが出るので、それらすべての使い方についてコメントする必要があります。
Goでこの種のチェックを回避する方法はありますか?
私はGoを学習していますが、コンパイルするときに変数やパッケージを未使用のままにしてはいけないのは少し面倒です。
これは本当に私をかなり遅くしています。たとえば、新しいパッケージを宣言して後で使用するか、テストするコマンドのコメントを外したいだけです。私はいつもエラーが出るので、それらすべての使い方についてコメントする必要があります。
Goでこの種のチェックを回避する方法はありますか?
回答:
そのエラーは、より良いコードを書くように強制するためのものであり、宣言またはインポートするすべてのものを使用するようにしてください。他の人が書いたコードを読みやすくし(宣言されたすべての変数が使用されることを常に確信しています)、デッドコードの可能性を回避します。
ただし、このエラーを本当にスキップしたい場合は、空白の識別子(_
)を使用できます。
package main
import (
"fmt" // imported and not used: "fmt"
)
func main() {
i := 1 // i declared and not used
}
なる
package main
import (
_ "fmt" // no more error
)
func main() {
i := 1 // no more error
_ = i
}
以下のコメントでkostixが述べたように、FAQで Goチームの公式ポジションを見つけることができます。
未使用の変数の存在はバグを示している可能性がありますが、未使用のインポートはコンパイルを遅くするだけです。コードツリーに十分な未使用のインポートを蓄積すると、処理が非常に遅くなる可能性があります。これらの理由により、Goではどちらも許可されていません。
これには簡単な「null関数」を使用できます。次に例を示します。
func Use(vals ...interface{}) {
for _, val := range vals {
_ = val
}
}
あなたはそのように使用できます:
package main
func main() {
a := "declared and not used"
b := "another declared and not used"
c := 123
Use(a, b, c)
}
あります。このためパッケージには、ユーザーが定義する必要はありませんので、Use
機能を毎回:
import (
"github.com/lunux2008/xulu"
)
func main() {
// [..]
xulu.Use(a, b, c)
}
FAQによると:
一部のユーザーは、これらのチェックをオフにするか、少なくとも警告を表示しないようにするコンパイラオプションを求めています。ただし、コンパイラオプションは言語のセマンティクスに影響を与えないため、Goコンパイラは警告を報告せず、コンパイルを妨げるエラーのみを報告するため、このようなオプションは追加されていません。
警告がない理由は2つあります。まず、文句を言う価値がある場合は、コードを修正する価値があります。(そして、修正する価値がない場合は、言及する価値がありません。)2番目に、コンパイラーに警告を生成させると、実装に、ノイズの多いコンパイルを作成する可能性がある弱いケースについて警告し、修正すべき実際のエラーをマスクします。
検討する価値がないさまざまな理由で、私は必ずしもこれに同意しません。それがそうであり、近い将来変更される可能性は低いです。
パッケージについてgoimports
は、不足しているパッケージを自動的に追加し、未使用のパッケージを削除するツールがあります。例えば:
# Install it
$ go get golang.org/x/tools/cmd/goimports
# -w to write the source file instead of stdout
$ goimports -w my_file.go
中途半端なエディタからこれを実行できるはずです-例えばVimの場合:
:!goimports -w %
このgoimports
ページには他のエディター用のコマンドがいくつかリストされており、通常は、バッファーをディスクに保存するときに自動的に実行されるように設定します。
goimports
も実行されることに注意してくださいgofmt
。
すでに述べたように、変数の場合、最も簡単な方法は(一時的に)変数を次のように割り当てること_
です。
// No errors
tasty := "ice cream"
horrible := "marmite"
// Commented out for debugging
//eat(tasty, horrible)
_, _ = tasty, horrible
これまでに言及されていない1つの角度は、コードの編集に使用されるツールセットです。
呼び出されたlukehobanの拡張機能と共にVisual Studio Codeを使用すると、いくつかの自動マジックが実行されます。囲碁の拡張子が自動的に実行されます、など、および削除し、追加のエントリをGo
gofmt
golint
import
。したがって、少なくともその部分は自動化されています。
質問に対する100%の解決策ではありませんが、十分に役立ちます。