ビッグデータ時代の到来により、企業が処理する必要のあるデータの量はますます増大し、処理速度もますます高速化しています。したがって、同時実行性の高い 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 サイトの他の関連記事を参照してください。