ホームページ  >  記事  >  バックエンド開発  >  入門から熟練度まで: Go-Zero フレームワークをマスターする

入門から熟練度まで: Go-Zero フレームワークをマスターする

WBOY
WBOYオリジナル
2023-06-23 11:37:372202ブラウズ

Go-zero は、RPC、キャッシュ、スケジュールされたタスク、その他の機能を含む、完全なソリューション セットを提供する優れた Go 言語フレームワークです。実際、go-zero を使用して高パフォーマンスのサービスを構築するのは非常に簡単で、数時間で初心者から熟練者になることもできます。

この記事は、go-zero フレームワークを使用して高パフォーマンスのサービスを構築するプロセスを紹介し、読者がフレームワークの核となる概念をすぐに理解できるようにすることを目的としています。

1. インストールと構成

go-zero の使用を開始する前に、go-zero をインストールし、必要な環境をいくつか構成する必要があります。

1. インストール

go-zero のインストールは非常に簡単で、次のコマンドを実行するだけです:

$ go get -u github.com/tal-tech/go-zero

これにより、GitHub から go-zero の最新バージョンが自動的にダウンロードされます。ただし、Go 1.13 以降の使用が推奨されることに注意してください。

2. 構成

go-zero を使用する前に、それに必要な環境をいくつか構成する必要があります。具体的には、go-zero を使用してサービスを作成するには、goctl コマンド ライン ツールをインストールする必要があります。

$ GO111MODULE=on go get -u github.com/tal-tech/go-zero/tools/goctl

3. プロジェクトの作成

次に、goctl を使用して新しいプロジェクトを作成する必要があります。プロジェクトの名前は blog であると想定し、次のコマンドで作成できるとします。

$ mkdir blog
$ cd blog
$ go mod init blog
$ goctl api new blog

上記のコマンドは、新しい API プロジェクトを作成し、必要なファイルとディレクトリをいくつか生成します。

2. サービスの作成

次に、go-zero を使用して新しいサービスを作成します。サービス名は user-service であると仮定し、次の手順で作成できます:

1. サービスの生成

goctl を使用して user-service のサービス コードを生成します:

$ goctl api go -api user.api -dir .

上記のコマンド 現在のディレクトリにユーザー ディレクトリが生成され、user.go という名前のファイルが含まれます。このファイルには user-service のサービス コードが含まれています。

2. ハンドラーの実装

特定のビジネス ロジック (ハンドラー) を実装する必要もあります。

まず、ユーザー ディレクトリに handler という名前の新しいディレクトリを作成し、その中に userhandler.go という名前のファイルを作成する必要があります。このファイルにはハンドラー コードが含まれます。

userhandler.go コードは次のとおりです:

package handler

import (
    "net/http"

    "github.com/tal-tech/go-zero/rest/httpx"
    "blog/service/user/api/internal/logic"
    "blog/service/user/api/internal/svc"
)

func userHandler(ctx *svc.ServiceContext) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        req, err := httpx.NewRequest(r)
        if err != nil {
            httpx.WriteError(w, err)
            return
        }

        l := logic.NewUserLogic(r.Context(), ctx)
        resp, err := l.GetUser(req)
        if err != nil {
            httpx.WriteError(w, err)
            return
        }

        httpx.WriteJson(w, resp)
    }
}

上記のコードは、go-zero によって提供されるrest/httpx パッケージを使用します。このパッケージは、NewRequest、WriteError、WriteJSON などの便利な関数を提供します。など HTTP サービスの作成プロセスが簡素化されました。

3. ハンドラーの登録

次に、上記のハンドラー プログラムをサービスに登録する必要があります。

user.go ファイルの init メソッドに、次のコードを追加します:

func (s *Service) InitHandlers() {
    s.UserHandler = http.HandlerFunc(handler.UserHandler(s.Context))
}

上記のコードは、userHandler 関数を HTTP サービスとして登録します。これにアクセスするには、 API ファイルを提供します。

3. テンプレートの作成

goctl create api を使用して新しい go-zero API を生成でき、これによりいくつかの初期化設定を含むフォルダーが自動的に作成されます。 goctl の要件に従って、独自のコントローラーとサービスを追加できます。

ここでは、go-zero のソース コードの読み方をよりよく学ぶためのテンプレート アプリケーションを作成します。アプリケーションには、go-zero の共通機能の使用方法を示す CRUD サンプルが含まれます。

1. テンプレートの生成

goctl を使用してテンプレート アプリケーションを生成し、go-zero のソース コードをよりよく学習できます。

$ goctl api template -o app.go

上記のコマンドは、テンプレート アプリケーションのすべてのソース コードを含む app.go という名前のファイルを作成します。

2. データ アクセスの実装

データ ストレージには MySQL が使用されることを前提としています。開始する前に、MySQL をインストールして構成する必要があります。これに基づいて、go-zero が提供する go-sql を使用してデータベース アクセス層を構築できます。

具体的には、goctl を使用してデータ アクセス レイヤー コードを生成できます。

$ goctl model mysql datasource "root:123456@tcp(127.0.0.1:3306)/test" -table user -dir .

上記のコマンドは、データ アクセス用のユーザー データ モデルを含む userModel.go ファイルを生成します。

3. ビジネス ロジックの実装

次に、ビジネス ロジックを実装し、データ アクセス層と組み合わせて使用​​する必要があります。具体的には、ユーザー管理用のビジネス ロジックを含む userLogic.go というファイルを作成できます。

userLogic.go コードは次のとおりです:

package logic

import (
    "context"
    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/core/stores/sqlx"
    "blog/service/user/model"
    "blog/service/user/api/internal/svc"
    "blog/service/user/api/internal/types"
)

type UserLogic struct {
    ctx context.Context
    svcCtx *svc.ServiceContext
    logx.Logger
}

func NewUserLogic(ctx context.Context, svcCtx *svc.ServiceContext) UserLogic {
    return UserLogic{
        ctx: ctx,
        svcCtx: svcCtx,
        Logger: logx.WithContext(ctx),
    }
}

func (l *UserLogic) GetUser(req types.GetUserRequest) (*types.GetUserResponse, error) {
    //Todo
}

上記のコードでは、sqlx、stores、logx パッケージを導入しました。sqlx は go-zero フレームワークの一部であり、特に使用されます。データベース操作用。ストアは、go-zero フレームワークのデータ ストレージ層です。 logx パッケージは、go-zero フレームワークによって提供されるログ ライブラリであり、重要なイベントの記録に役立ちます。

4. ETCD などの統合

go-zero フレームワークを使用すると、ETCD、Redis、ZooKeeper などの一般的に使用されるツールやサービスを簡単に統合できます。具体的には、go-zero が提供する関連ライブラリをコード内にインポートし、関連情報を設定ファイルに設定できます。

一般的に使用される統合方法の一部を次に示します:

1. ETCD の統合

まず、次の情報を構成ファイルに追加します:

[etcd]
host = "localhost:2379"

次にの etcd コードを使用するには、clientv3.New 関数を使用して新しい etcd クライアントを作成します。

import (
    "go.etcd.io/etcd/clientv3"
)

client, err := clientv3.New(clientv3.Config{
    Endpoints:   []string{"localhost:2379"},
    DialTimeout: 5 * time.Second,
})
if err != nil {
    panic(err)
}

上記のコードは、ETCD サーバーのアドレスとして localhost:2379 を使用する client という名前の ETCD クライアントを作成します。

2. Redis の統合

Redis を使用するには、次の情報を構成ファイルに追加する必要があります:

[redis]
host = "localhost:6379"
password = ""
db = 0

次に、Redis を使用するコード内のNewClient 関数は、新しい Redis クライアントを作成します。

import (
    "github.com/go-redis/redis"
)

client := redis.NewClient(&redis.Options{
    Addr:     "localhost:6379",
    Password: "", // no password set
    DB:       0,  // use default DB
})

上記のコードは、新しい Redis クライアントを作成します。このクライアントは、Redis サーバー アドレスとして localhost:6379 を使用し、パスワードは使用せず、デフォルトの DB を使用します。

3.ZooKeeper の統合

要使用ZooKeeper,我们需要在配置文件中添加以下信息:

[zookeeper]
host = "localhost:2181"

然后,在要使用ZooKeeper的代码中,使用zk.Connect函数创建一个新的ZooKeeper客户端。

import (
    "github.com/samuel/go-zookeeper/zk"
    "time"
)

conn, _, err := zk.Connect([]string{"localhost:2181"}, time.Second*5)
if err != nil {
    panic(err)
}

上述代码将创建一个名为conn的ZooKeeper客户端,它将使用localhost:2181作为ZooKeeper服务器的地址。

五、总结

到目前为止,我们已经深入了解了go-zero框架,并学到了如何使用它来构建高性能服务。

总结一下,要使用go-zero,请先安装和配置相关环境,然后创建一个新的项目,通过goctl命令行工具自动生成模板代码和配置文件。

接着,可以使用go-zero提供的各种功能和服务来逐步完善和扩展我们的应用程序,如集成数据库、ETCD、Redis等。

将go-zero框架用于您的下一个项目吧,它将使您能够构建出更加灵活、高效和可靠的服务!

以上が入門から熟練度まで: Go-Zero フレームワークをマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。