gin に基づいて独自の go プロジェクトをゼロから構築する方法を段階的に説明します (1)

1. なぜこれを書くのか、誰に適しているのか?

理由

ガジェットを書きたかったので、当初はegg.jsを使ってサーバーを書く予定でしたが、途中でもっと面白いものを見つけたのですが、持っていたサーバーがすべて1コア2Gの小さな水道管だったことが分かりました。 Node.Top は少し使いにくかったので、他の技術スタックを使って問題を解決することにしました.kotlin と go で予備調査を行った結果、go の方が私のニーズに適していることがわかったので、このシリーズを思いつきましたノート出力。

食べる人にぴったり

  1. Go テクノロジー スタックやバックエンド ルーチンについてあまり知らない初心者
  2. ガジェットを作りたいフロントエンドの学生
  3. ノードが欲望を満たさなくなったフロントエンドの生徒
  4. プロジェクトをゼロから構築する方法を学びたい初心者の学生

食用には適さない

  1. プログラミングの基礎を持たない純粋な初心者
  2. ボスに行く
  3. バックエンドボス

何を期待します

記事は 10 個ほどありますが、後で簡単にまとめて使用できる、自分の用途に適した一般的なテンプレートに書き込む予定です。

現在公開されているコンテンツは初期版であり、すべてのコンテンツを書き終えた後、より使いやすいものとなるよう修正、追加、削除が行われます。

単一のアプリケーションに限定されているため、マイクロサービスを開発したい場合は、Bilibili のオープンソースの kratos フレームワークまたは istio について学ぶことができます。

2. goのインストール方法

(1) ダウンロード

1. go のダウンロードは非常に簡単で、Windows または Mac の場合は、公式 Web サイトに直接アクセスして必要なバージョンをダウンロードし、指示に従ってインストールします。

官网地址:golang.org/dl/

画像.png

(2) 環境変数の設定

1、窓

1.1 システム変数

インストールが完了すると、Go 言語の GOROOT 変数がシステム変数の Path 列に C:\Go\bin という値で自動的に設定されます。通常、システム変数を変更する必要はありません。

1.2 ユーザー変数

ユーザー変数列では、GOPATH 変数が自動的に構成されます。デフォルト値は %USERPROFILE%\go で、ユーザー変数のパスには %USERPROFILE%\bin が自動的に構成されます。この GOPATH は作業ディレクトリです。デフォルトのパスを使用したくない場合は、次のように変更できます。

  1. 必要なディレクトリを作成し、このディレクトリに 3 つのサブフォルダー (bin、pkg、src) を作成します。
  2. GOPATH を編集し、%USERPROFILE%\go の値をカスタム ディレクトリに変更します。
  3. ユーザー変数のパスを編集し、%USERPROFILE%\bin を %GOPATH%\bin に変更します。

2、MAC

1.1 バッシュ

  1. .bash_profile を開きます。ターミナルで open ~/.bash_profile または vim ~/.bash_profile と入力してファイルを編集できます

画像.png

  1. 構成を追加し、構成ファイルの最後に追加します

    エクスポート GOPATH=$HOME/go

    エクスポート GOBIN=$GOPATH/bin

    エクスポート PATH=����:PATH:GOBIN

画像.png

  1. 最後にsource ~/.bash_profileが設定をリロードします

  2. go env を使用して変更されているかどうかを確認します

2.2zsh

Mac のデフォルトのシェルは zsh なので、bash 設定ファイルを変更するだけでは十分ではなく、上記の操作に従って zsh 設定ファイルを開いて再試行する必要があります。

  1. .zshrc を開きます。ターミナルに open ~/.zshrc または vim ~/.zshrc と入力してファイルを編集します。

  2. 構成を追加し、構成ファイルの最後に追加します

    これ

    コードをコピーする

    export GOPATH=$HOME/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOBIN
  3. 最後にsource ~/.zshrcが設定をリロードします

  4. go env を使用して変更されているかどうかを確認します

3. Go イメージを変更し、go mod を有効にする

 
 

これ

コードをコピーする

go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct

3.1 go.mod とは何ですか? Go.mod は、依存パッケージの管理を容易にするために、以前は依存パッケージの特定のバージョンを記録する場所がなかったという問題を解決するために、Golang バージョン 1.11 で新たに導入された公式パッケージ管理ツールです。 。

Go.mod は実際にはモジュールです。モジュールの正式な定義は次のとおりです。

モジュールは関連する Go パッケージの集合であり、ソース コード交換とバージョン管理の単位です。 go コマンドは、他のモジュールへの依存関係のログ記録や解決など、モジュールの使用を直接サポートします。モジュールは、使用するソース ファイルを指定する古い GOPATH ベースの方法を置き換えます。

モジュールは従来の GOPATH とは異なり、src や bin などのサブディレクトリを含める必要はなく、go.mod ファイルが含まれていれば、ソース コード ディレクトリや空のディレクトリでもモジュールとして使用できます。

3.2 GO111MODULEパラメータ

  1. GO111MODULE=off の場合、go コマンド ラインはモジュール機能をサポートせず、依存パッケージを検索する方法はベンダー ディレクトリまたは GOPATH モードを通じて古いバージョンで引き続き使用されます。

  2. GO111MODULE=on の場合、go コマンド ラインはモジュールを使用し、GOPATH ディレクトリ内をまったく検索しません。

  3. GO111MODULE=auto、デフォルト値。go コマンドラインは、現在のディレクトリに基づいてモジュール機能を有効にするかどうかを決定します。この状況は次の 2 つの状況に分類できます。

    (1) 現在のディレクトリは GOPATH/src の外側にあり、そのディレクトリには go.mod ファイルが含まれています。 (2) 現在のファイルは go.mod ファイルが含まれているディレクトリの下にあります。

**注意:** GO111MODULE パラメータを変更するには、 go env -w GO111MODULE=on を使用できます。

3.3 プロジェクトで go.mod を使用するにはどうすればよいですか?

1. GOPATH/src ディレクトリの外に新しいプロジェクトを作成します。

go.mod ファイルが作成されると、その内容は go ツールチェーンによって完全に制御されます。 go ツールチェーンは、go get、go build、go mod などのさまざまなコマンドが実行されるときに go.mod ファイルを変更および維持します。

go.mod ファイルには、module、require、replace、exclude の 4 つのキーワードが含まれています。

  • moduleステートメントはパッケージの名前 (パス) を指定します
  • requireステートメントで指定された依存関係モジュール
  • replaceステートメントは依存関係モジュールを置き換えることができます
  • excludeステートメントは依存関係モジュールを無視できます

2. 現在のディレクトリで、コマンド ライン go mod init + モジュール名 を実行してモジュールを初期化します

初期化後、現在のディレクトリに go.mod ファイルが生成されますが、これは go がパッケージを管理するために使用するキー ファイルです。

**注 1:** ビルドの一貫性を確保するために、Go では、依存する各パッケージのバージョンをマークする go.mod ファイルが導入されます。ビルド プロセス中に goこのコマンドはgo.mod に依存関係パッケージをダウンロードし、ダウンロードされた依存関係パッケージは次のビルドのためにローカルにキャッシュされます。ダウンロードされた依存関係パッケージがハッカーによって悪意を持って改ざんされる可能性があり、ローカルにキャッシュされた依存関係パッケージも改ざんされる可能性があることを考慮すると、単一の go.mod ファイルでは一貫性のあるビルドを保証できません。

Go モジュールのこのセキュリティ リスクを解決するために、Go 開発チームは go.mod を導入し、各ハッシュ値を記録する go.sum ファイルも導入しました。依存パッケージ。ビルド時に、ローカルの依存パッケージのハッシュ値が go.sum ファイルに記録されているハッシュ値と一致しない場合、ビルドは拒否されます。

**注 2:**go.sum は手動メンテナンスを必要としないため、あまり注意を払う必要はありません。

**注意 3:** サブディレクトリでは Init は必要ありません。サブディレクトリ内のすべての依存関係は、ルート ディレクトリの go.mod ファイルに整理されます。

**注 4:** Go のパッケージ管理方法を使用すると、依存するサードパーティ パッケージが $GOPATH/pkg/mod パスにダウンロードされます。

**注 5:** バージョンは go.mod で指定されます。 go.mod で指定されていない場合、go コマンドはコード内の依存関係の最新バージョンを自動的にダウンロードします。 go.mod の require ステートメントを使用してパッケージとバージョンを指定すると、go コマンドは指定されたパスとバージョンに従ってパッケージをダウンロードします。バージョンを指定するときにlatestを使用すると、自動的に最新バージョンがダウンロードされます。指定されたパッケージの;

注 6: go mod init モジュール名。生成された go.mod ファイルの最初の行で module モジュール名を宣言します。

機能: たとえば、プロジェクトの下に新しいディレクトリ utils を作成し、tools.go ファイルを作成します。

ルート ディレクトリの hello.go ファイルで、「hello/utils」をインポートしてユーティリティを参照できます。

 
 

行く

コードをコピーする

package main import ( "hello/utils" "github.com/astaxie/beego" ) func main() { utils.PrintText("Hi") }

3.4 go.mod コマンド

  • go mod download はモジュールをローカル キャッシュにダウンロードします。キャッシュ パスは $GOPATH/pkg/mod/cache です。
  • go mod edit は、コマンド版で go.mod を編集する機能を提供します (例: go mod edit -fmt go.mod は go.mod をフォーマットします)
  • go mod chart はモジュール間の依存関係グラフを表示します
  • go mod init 初期化モジュール (たとえば、dep によって元々管理されていた依存関係を変換します)
  • go mod tinyは不足しているパッケージを追加し、不要なパッケージを削除します
  • go modvendor は依存関係を Vendor/ ディレクトリにコピーします
  • go mod verify 依存関係を確認する
  • go mod Why はパッケージとモジュールが必要な理由を説明します

添付: go 関連コマンド

  1. モジュールのルートディレクトリを指定し、go.modファイルを生成します。

    ​​​​​​​go mod init example.com/hello
  2. go.mod ファイルをダウンロードして依存関係を追加します。

    go build, go test
  3. モジュールの下のすべての依存関係を表示する

    go list -m all

  4. 安定したバージョンの依存関係を更新する

    go get rsc.io/sampler

  5. 無駄な依存関係をクリーンアップする

    go mod tidy
  6. 依存関係をプロジェクト パスのベンダー フォルダーにコピーします。

    go mod vendor

  7. キャッシュ内のパッケージを無視し、ベンダー ディレクトリ内の依存関係のみをコンパイルに使用します。

    go build -mod=vendor
  8. 依存関係を確認し、変更があるかどうかを確認します

    go mod verify

**注意 1:** GO111MODULE のデフォルト値は auto であるため、GOPATH ではデフォルトでは go mod コマンドを実行できません。 。 GO111MODULE のデフォルト値は auto であるため、デフォルトでは GOPATH では実行できません。デフォルトでは、GOPATH では実行されません。強制的に実行する必要がある場合は、環境変数を on に設定してください。

**注 2:**モジュール名が接続されていない場合、go mod init は実行できず、エラーが報告されます。go: ソースのモジュール パスを決定できませんディレクトリ。

3. 初期化プロジェクト

(1) プロジェクトディレクトリを新規作成し初期化する

1. 新しいプロジェクト ディレクトリを作成します

まず、お気に入りのフォルダーを選択し、その下に新しいプロジェクト ディレクトリを作成します。名前は好みに応じて選択できます。下の図に示すように、go_server という名前の新しいプロジェクト ディレクトリを作成しました。現時点では、空の。 。

画像.png

2. プロジェクトの初期化

新しいプロジェクトを作成した後、最初に行う必要があるのは、プロジェクトを初期化し、プロジェクト内の依存関係を管理するために新しい go.mod ファイルを作成することです。具体的な方法については、上記のドキュメントを参照してください。ここではそれを実行しました。

go mod init myblog-server

go.mod ファイルが生成されます

画像.png

3.Gin フレームワークをインポートする

3.1 ジンとは

Gin は、Go (Golang) で書かれた HTTP Web フレームワークです。これは、martini に似た API フレームワークですが、パフォーマンスが優れており、httprouter よりも優れており、ほぼ 40 倍高速です。 (以上は公式サイトの説明文です)

3.2 使用の前提条件

ジンを使用するには Go バージョン 1.6 以降が必要です

3.3 ジンのインストール

go get -u github.com/gin-gonic/gin

実行後、通常はフォルダー内に go.sum ファイルが追加されますが、その機能については上で説明しましたが、通常は特に注意する必要はありませんので、ここでは省略します。

画像.png

4. エントリファイル main.go を作成します。

4.1 ルートディレクトリに新しいエントリファイル main.go を作成します。

次のコードを入力してください

package main

import (
  "fmt"
  "github.com/gin-gonic/gin"
)

func main() {
  S := gin.Default()
  S.GET("/", func(c *gin.Context) {
    c.JSON(200, gin.H{"msg": "服务启动成功"})
  })
  err := S.Run(":8080")
  if err != nil {
    fmt.Println("服务器启动失败!")
  }
}

画像.png

4.2 go run main.go を使用してルート ディレクトリでサービスを開始します

画像.png

現時点では、ブラウザでアクセスしますlocalhost:8080 または127.0.0.1:8080< /span> ご覧いただけます

画像.png

おすすめ

転載: blog.csdn.net/lqzixi/article/details/134768855