1. ホーム
  2. go

go build error, error can't load package: package xxx is not in GOROOT (D:\basic_tool╱GoGoSrc╱)

2022-02-13 19:31:09
<パス

背景

この行くビルドエラーは、おそらく最大の理由や白い男、日プラス夜のほとんどを投げた後、様々な理由でDounianが、また適切な解決策を見つけなかった、そして最後にまたは正常に解決兄の指導の下、それを記録するので、長い間私を悩ませています。

設定環境の紹介

  • 目的:Goプロジェクトをアイデアバイナリとしてビルドし、それをサーバーに置いて実行する。
  • Goのコンパイルに必要な環境変数がwindow下に正常に設定され、設定情報は以下のようになります。
  • 次の画像に示すように、IDEA で Go 環境が正常に設定され、Go プラグインがダウンロードされ、GROOT、GOPATH、GOPROXY が正しく構成されています。



  • go env -w GO111MODULE=on と設定し、go mod をオンモードにします。
  • IDEAコマンドラインでgo buildの前に変数を設定します。具体的にはコンパイルするプロジェクトのSET CGO_ENABLED=0, SET GOOS=linux, SET GOARCH=amd64です(ここでSETは大文字でなければ動作しないことに注意してください)。
  • 上記の手順が完了したら、IDEAのコマンドラインでcdしてコンパイルするプロジェクトのあるディレクトリに入り、go build project name/filename.goを実行するか、コンパイルするプロジェクトの親ディレクトリでgo build project nameを実行すると、同様のエラーが表示され、うまくいかないことがあるようです。
    とにかく、一言で言えば、go buildは常に、コンパイルするパッケージがGOROOTのsrcディレクトリにロードできないと言うことです

問題の原因と解決策

GOでパッケージを管理する方法として、従来のGOPATHモードと現在人気のGOMODの2つがあることは皆さんご存知だと思います、主に私は最初この2つの方法についてよく知らなかったので、コンパイルしたいプロジェクトがgo modという形式でコンパイルされていることだけを知っていて、深い理由はわかりませんでした、インターネット上にはこの2つの違いや詳しい説明がたくさんあり、この記事で詳細を述べることはいたしません。
コンパイルの流れは以下の通りです。

  • コンパイルするプロジェクトのディレクトリを入力します。コンパイルするディレクトリが E:/myProjects/test で、test ディレクトリに 3 つの .go ファイルがあるとすると、次のコマンドを実行してコンパイルディレクトリに入ります。
cd e:/myProjects/test


  • 次に、コンパイル環境を整える
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64


  • そして、直接go buildを実行すると、ファイル名testのバイナリファイルが生成されます。