ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する

藏色散人
リリース: 2020-11-03 15:19:58
転載
2873 人が閲覧しました

次のコラムでは、ファイル変更時に ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する プログラムを自動的にリロードする 5 つの方法を紹介します。

GO を作成するときに、多くの人、特に次のようなインタープリタ型言語の使用に慣れている人は、コードのリアルタイム読み込み (ホット コンパイル) の効果を期待します。 JavaScript、Python、Ruby. この記事では ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する プログラムをリアルタイムでリロードする 5 つの方法を紹介しました。

ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する

この記事では、ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する コンパイラーがインストールされており、

GOPATH/bin

パスが PATH 環境変数に追加されていることを前提としています。

始める前に、まず、応答コンテンツ「Hello, World」を返すことができる単純な Web サーバーを作成します。

package mainimport (
    "net/http")func main() {
    http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, World"))
    })

    http.ListenAndServe(":5000", nil)}
ログイン後にコピー

方法 1: Air を使用する

Air は、ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する プログラムにリアルタイムのコード読み込みを提供するコマンド ライン プログラムです。 次のコマンドを実行して Air をインストールします。

go get -u github.com/cosmtrek/air
ログイン後にコピー

次のステップでは、Air 構成ファイル

.air.conf

をプロジェクトのルート ディレクトリに作成します。

# .air.conf
# toml配置文件来源于 [Air](https://github.com/cosmtrek/air)# 工作区间
# .(当前目录)或绝对路径, 注意这些目录都在根目录下面.root = "." tmp_dir = "tmp"[build]# 只是普通的shell命令。 可以使用`make`。
cmd = "go build -o ./tmp/main ."# `cmd`配置命令输出的二进制文件的位置。
bin = "tmp/main"# 自定义二进制输出。
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"# 监听的文件扩展后缀列表。
include_ext = ["go", "tpl", "tmpl", "html"]# 忽略这些文件扩展名或目录。
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]# 如果指定,则监听包含这些文件。
include_dir = []# 忽略文件列表.exclude_file = []# 如果文件修改太频繁,则不必在每次修改时都立刻触发构建,设置触发等待时间。
delay = 1000 # ms
# 发生编译错误时,是否停止旧的二进制程序。
stop_on_error = true# 该日志文件放置在tmp_dir中。
log = "air_errors.log"[log]# 日志是否显示时间
time = false[color]# 自定义每类输出的颜色。 如果找不到这个颜色,使用原本的日志输出演示。
main = "magenta"watcher = "cyan"build = "yellow"runner = "green"[misc]# 退出时是否删除临时目录
clean_on_exit = true
ログイン後にコピー

構成はシンプルかつ明確です。プロジェクトの状況に応じて調整してください。 最後に、一般的な

go run

コマンドを使用して ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する プログラムを実行する代わりに、

air

コマンドを使用してプログラムを開始します。 #方法 2: Ari を実行する docker

この方法では docker を使用する必要があります。インストールしていない場合は、次の手順に従ってください。

今後も Air ライブラリを使用するので、Air プロファイルは引き続き必要です。まだプロフィールを作成していない場合は、プロフィールを作成してください。

Docker イメージ

cosmtrek/air

には Air コマンドがインストールされており、GOPATH 環境変数は

/go

に設定されています。

プロジェクト ディレクトリを Docker コンテナの GOPATH にマウントし、-p を使用して使用する必要があるポートを公開するだけです。これは、docker run コマンドを実行することで実現できます:

docker run -it --rm -w <working_dir> -v <project_folder>:<mount_point> -p <host_port>:<container_port> <image_name></image_name></container_port></host_port></mount_point></project_folder></working_dir>
ログイン後にコピー
私の場合、次のコマンドを実行する必要がありました:
docker run -it --rm -w /go/src/github.com/praveen001/live-reloading -v /go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading -p 5000:5000 cosmtrek/air
ログイン後にコピー

説明:

# -v パラメーターを使用して、プロジェクト ディレクトリ

/home/praveen/go/src/github.com/praveen001/live-reloading

をコンテナ /go/ 内の GOPATH 内のディレクトリにマウントします。 src/github.com/praveen001/live-reloading

-v /home/praveen/go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading
ログイン後にコピー

-w パラメータを使用して、マウント ディレクトリを作業ディレクトリとして指定します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">-w /go/src/github.com/praveen001/live-reloading</pre><div class="contentsignin">ログイン後にコピー</div></div> Web サーバーはポート 5000 でリッスンしているため、

-p

フラグを使用してコンテナー ポート 5000 をホスト ポート 5000 に公開する必要があります。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">-p 5000:5000</pre><div class="contentsignin">ログイン後にコピー</div></div>最後に、docker イメージ名

cosmtrek/air

を指定します。

方法 3: Gin を使用するGin は、ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する アプリケーションをライブ リロードするためのもう 1 つのコマンド ライン プログラムです。

次のコマンドを実行して、Gin をインストールします。
go get github.com/codegangsta/gin
ログイン後にコピー
通常の

go run main.go

コマンドを使用してアプリケーションを実行する代わりに、

gin

コマンドを使用します。

私の場合、--appPort パラメータは、Gin にポート 5000 でリッスンするように指示し、--port パラメータは、Gin にポート 3000 でリッスンするようにプロキシに指示します。 .

gin --appPort 5000 --port 3000
ログイン後にコピー

次に、アドレス http://localhost:3000 を使用して、Gin プログラムにアクセスします。リスニング ディレクトリを除外したい場合は、

--excludeDir

パラメータ (例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">gin --appPort 5000 --port 3000 --excludeDir ./frontend</pre><div class="contentsignin">ログイン後にコピー</div></div> Gin を使用してポート リスニングを開始しないプログラムをロードする場合は、

--immediate

パラメータを使用する必要があります) 。しかし、Gin は引き続きポート 5000 に行きます。 サポートされているすべてのパラメーターは、Gin の Github で見つけることができます。

方法 4: Nodemon を使用する

Nodemon は、リアルタイムのもう 1 つの方法です。コマンドをリロードします。 Nodeアプリケーション用のラインプログラム。ただし、

--exec

パラメーターを使用すると、スタートアップ コマンドを使用して他のアプリケーションを起動できます。 Nodemon を使用するには、Nodejs と NPM をインストールする必要があります。インストールされていない場合は、nodejs の公式ドキュメントに従ってインストールできます。

次のコマンドを実行して、nodemon をインストールします: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">npm install -g nodemon</pre><div class="contentsignin">ログイン後にコピー</div></div>これで、Nodemon を使用して Web サーバーを実行できるようになります。次のコマンドを実行します。

nodemon --exec go run main.go --signal SIGTERM
ログイン後にコピー

Nodemon を構成する場合は、プロジェクトのルート ディレクトリに構成ファイル

nodemon.json

を作成してください。完全な設定ファイルの例が入手可能です

方法 5: Fresh の使用Fresh は、ファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有する プログラムをライブ リロードするためのもう 1 つの GO 実装です

Fresh をインストールします
go get github.com/pilu/fresh
ログイン後にコピー
通常の

go run main.go

コマンドを使用してアプリケーションを実行する代わりに、

fresh

コマンドを使用します。

fresh
ログイン後にコピー

Fresh を設定するには、プロジェクトのルート ディレクトリに設定ファイル runner.conf を作成する必要があります。 これはサンプル構成ファイルです。

root:              .tmp_path:          ./tmp
build_name:        runner-build
build_log:         runner-build-errors.log
valid_ext:         .go, .tpl, .tmpl, .html
no_rebuild_ext:    .tpl, .tmpl, .html
ignored:           assets, tmp
build_delay:       600colors:            1log_color_main:    cyan
log_color_build:   yellow
log_color_runner:  green
log_color_watcher: magenta
log_color_app:
ログイン後にコピー

概要

他にも次のようなツールが多数あります。

  • Facebook's Watchman
  • Realize
  • Reflex
  • カスタム構築ソリューションも

元のアドレス: https ://techinscribed.com/5-ways-to-live-reloading-go-applications/

翻訳アドレス: https://learnku.com/go/t/51189

以上がファイルが変更されたときに Go プログラムを自動的にリロードする 5 つの方法を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート