同時実行性の高い API サービスを構築する: go-zero を使用して実装する

王林
リリース: 2023-06-22 17:07:37
オリジナル
1748 人が閲覧しました

ビッグデータ時代の到来により、企業が処理する必要のあるデータの量はますます増大し、処理速度もますます高速化しています。したがって、同時実行性の高い API サービスを構築することが非常に重要になります。この記事では、go-zero フレームワークを使用して同時実行性の高い API サービスを構築する方法を紹介します。

1.ゴーゼロとは何ですか?

go-zero は Golang 言語をベースに開発されたマイクロサービス フレームワークで、複雑な構成、ミドルウェア管理、サービス登録などのマイクロサービス アーキテクチャの問題点を解決することを目的としています。 go-zero は、高性能 API、ミドルウェア、RPC サービスの迅速な構築をサポートし、豊富なコンポーネントとツール チェーンのセットを提供します。

2. なぜ go-zero を使用するのでしょうか?

go-zero を使用すると、次の利点が得られます:

1. 高いパフォーマンス

go-zero は、非同期 IO や基盤となるコルーチンなど、多数の最適化テクノロジを使用します。プール待ち。したがって、そのパフォーマンスは非常に高く、多数の同時リクエストを処理できます。

2. 拡張が簡単

go-zero は多数のコンポーネントとツール チェーンを提供しており、コードを書き直すことなく構成ファイルを通じてサービスを迅速に拡張できます。

3. 高い信頼性

go-zero では、etcd や Consul などのサービス登録センターなど、安定した技術を多数採用し、システム全体の信頼性を確保しています。

4. 高い開発効率

go-zero の API 開発は Swagger/OpenAPI をベースとしているため、ドキュメントやクライアントを生成でき、開発効率が向上します。

3. go-zero を使用して同時実行性の高い API サービスを構築するにはどうすればよいですか?

ステップ 1: go-zero をインストールする

go-zero は、非同期 IO、基礎となるコルーチン プールなどを含む多数の最適化テクノロジを使用します。したがって、そのパフォーマンスは非常に高く、多数の同時リクエストを処理できます。

ステップ 2: API を作成する

単純な API を作成するには、プロジェクト ディレクトリに API ディレクトリを作成し、その中に user.api などのファイルを作成する必要があります。ファイルに次の内容を書き込みます。

type (
    UserReq struct {
        Name  string `json:"name"`
        Age   int    `json:"age"`
        Email string `json:"email"`
    }

    UserResp struct {
        Id       int    `json:"id"`
        UserName string `json:"username"`
        Age      int    `json:"age"`
        Email    string `json:"email"`
    }

    UserApi interface {
        AddUser(ctx context.Context, req UserReq) (*UserResp, error)
        UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error)
        GetUser(ctx context.Context, id int) (*UserResp, error)
    }
)

type (
    // 具体实现自己根据需要实现
    DefaultUserApi struct {
    }
)

func (ua *DefaultUserApi) AddUser(ctx context.Context, req UserReq) (*UserResp, error) {
    // 具体实现自己根据需要实现
    return nil, errors.New("not implement")
}

func (ua *DefaultUserApi) UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error) {
    // 具体实现自己根据需要实现
    return nil, errors.New("not implement")
}

func (ua *DefaultUserApi) GetUser(ctx context.Context, id int) (*UserResp, error) {
    // 具体实现自己根据需要实现
    return nil, errors.New("not implement")
}
ログイン後にコピー

ステップ 3: goctl を使用してコードを生成します。

# 安装goctl
GO111MODULE=on GOPROXY=https://goproxy.io,direct go get -u github.com/tal-tech/go-zero/tools/goctl
# 生成代码
goctl api go -api user.api -dir .
ログイン後にコピー

は、ディレクトリに user.go ファイルを生成します。このファイルには、カスタマイズされた構造体とインターフェイスも含まれています。 as some go-zero 自体によって生成された構造体と関数。

ステップ 4: 特定のロジックを実装する

user.go ファイルでは、独自の特定のロジックを実装する必要があります。たとえば、次のとおりです。

package api

import (
    "context"
    "errors"

    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/rest/httpx"
)

type (
    UserReq struct {
        Name  string `json:"name"`
        Age   int    `json:"age"`
        Email string `json:"email"`
    }

    UserResp struct {
        Id       int    `json:"id"`
        UserName string `json:"username"`
        Age      int    `json:"age"`
        Email    string `json:"email"`
    }

    UserApi interface {
        AddUser(ctx context.Context, req UserReq) (*UserResp, error)
        UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error)
        GetUser(ctx context.Context, id int) (*UserResp, error)
    }
)

type (
    // 具体实现自己根据需要实现
    DefaultUserApi struct {
    }
)

func (ua *DefaultUserApi) AddUser(ctx context.Context, req UserReq) (*UserResp, error) {
    // 具体实现
    logx.Info("add user:", req)
    return &UserResp{
        Id:       10001,
        UserName: req.Name,
        Age:      req.Age,
        Email:    req.Email,
    }, nil
}

func (ua *DefaultUserApi) UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error) {
    // 具体实现
    logx.Info("update user:", id, req)
    return &UserResp{
        Id:       id,
        UserName: req.Name,
        Age:      req.Age,
        Email:    req.Email,
    }, nil
}

func (ua *DefaultUserApi) GetUser(ctx context.Context, id int) (*UserResp, error) {
    // 具体实现
    logx.Info("get user:", id)
    return &UserResp{
        Id:       id,
        UserName: "张三",
        Age:      25,
        Email:    "zhangsan@mail.com",
    }, nil
}

func (ua *DefaultUserApi) Error(ctx context.Context, err error) {
    httpx.Error(ctx, err)
}
ログイン後にコピー

ステップ 5: 構成を記述するfile

プロジェクトのルートディレクトリに etc ディレクトリを作成し、その中に config.toml ファイルを作成し、次の内容を記述します。

Name = "user"

[server]
Host = "0.0.0.0"
Port = 8888
Mode = "dev"

[etcd]
Hosts = [
    "127.0.0.1:2379"
]

[redis]
Host = "127.0.0.1:6379"
Type = "standalone"
Password = ""
ログイン後にコピー

このうち、サーバー配下の Host と Port は、それぞれ、リッスンするサービスのアドレスとポート、etcd は etcd 登録センターのアドレスを表し、redis は redis のアドレスを表します。

ステップ 6: サービスの開始

プロジェクト ディレクトリで次のコマンドを実行します。

go run user.go -f etc/config.toml
ログイン後にコピー

は、config.toml を構成ファイルとして使用して API サービスを開始することを意味します。

ステップ 7: サービスをテストする

curl およびその他のツールを使用してリクエストを開始し、API インターフェイスが利用可能かどうかをテストします。例:

curl localhost:8888/user -X POST -H "Content-Type: application/json" -d '{"name":"zhangsan", "age": 20, "email": "zhangsan@mail.com"}'
ログイン後にコピー

は、localhost:8888/user の POST メソッドにリクエストを送信することを意味し、リクエストの本文には JSON オブジェクトが含まれます。

参考資料:

go-zero 公式ドキュメント: https://go-zero.dev/

go-zero github アドレス: https://github.com /tal-tech/go-zero

以上が同時実行性の高い API サービスを構築する: go-zero を使用して実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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