「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Golang が最初の作業タスクをどのように解決するか

Golang が最初の作業タスクをどのように解決するか

2024 年 7 月 31 日に公開
ブラウズ:486

Golang、または単に Go は、Go gopher 言語として知られるようになりました。なぜホリネズミなのかまだ理解できない場合は、この記事で驚くべきマスコットの歴史を見つけることができます。さて、最初から始めましょう。Golang は、世の中で最も生産性の高いプログラミング言語の 1 つとして知られるようになりました。 Java や Python などの従来の言語とは異なり、Go は書きやすいコードと迅速な実行の間で独自のバランスをとっており、開発を高速化し、デバッグとテストの時間を短縮します。この記事では、遅くて不安定な REST API マイクロサービスと対話するプロジェクトでゴルーチンとコンテキストを使用する実際の例を見ていきます。

タスク
あなたがチームに加わったばかりで、チーム リーダーから、Golang で書かれた新しいマイクロサービス (リスク マネージャーなど) を、REST API を通じて公開されるユーザー マイクロサービスにバインドするように頼まれたとします。

問題
リスク マネージャーは、速度が遅く不安定な可能性がある REST API を操作する必要があるため、そのようなリクエストを慎重に処理する必要があります。非同期 HTTP リクエストとコンテキストにはゴルーチンを使用して、リクエストのタイムアウトとエラー処理を管理します。

ソリューション

Golang でゴルーチンとコンテキストを使用すると、同時タスクの効率的な管理と、低速または不安定な外部 API の処理が可能になります。

コードで解釈するための最初のステップは API を作成することです。シェアウェア サービスを使用しました https://mockapi.io/ REST を生成すると便利ですusers.

などの基本的なエンティティ セットを含む API

Image description

誰かが最善を尽くし、あなたの会社にはユーザーをリストする内部サービスがあるとします。私たちのタスクは、新しいリスク マネージャーでユーザー リストを再利用することです (ユーザー データ構造は mockapi.io で記述された契約を満たしています)。以下のコードはリクエストを作成し、本文を処理して、ユーザーのリストまたは対応するエラーを生成します。

type User struct {
    CreatedAt string
    Name      string
    Avatar    string
    Id        string
}

// Original slow request
func fetchUsers(ctx context.Context) (*[]User, error) {
    resp, err := http.Get("https://.mockapi.io/api/v1/users")
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("failed to fetch users: %s", resp.Status)
    }

    var users []User
    if err := json.NewDecoder(resp.Body).Decode(&users); err != nil {
        return nil, err
    }

    return &users, nil
}

操作を制御するために、他のすべてのコンテキストの最上位の親コンテキストである context.Background を使用します。このコンテキストを新しいデータで補足します。この場合はタイムアウト - context.WithTimeout で、これを 2 秒として定義します。 Go でのコンテキストの操作について詳しくは、この記事をご覧ください。

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

usersChan := make(chan *[]User)
errChan := make(chan error)

go func() {
    users, err := fetchUsers(ctx)
    if err != nil {
        errChan 



この例では、内部サービスから受信した結果を記録するために usersChan を使用し、エラーを記録するために 2 番目のチャネル errChan を使用します。
遅い API からの応答が 2 秒以内に到着しない場合、エラーが検出され、外部レイヤーで正しく処理する機会が与えられます。

リスク マネージャーを使用したこの実践的な例では、ゴルーチンによって非同期 HTTP リクエストが有効になり、コンテキストによってタイムアウト処理が保証されます。これは、信頼性が高く回復力のあるマイクロサービスを構築するために重要です。

追記

この記事は、基本的な知識はあるものの、その知識をどこに応用できるかがよくわからない初心者開発者を対象としています。フィードバックをお待ちしております。また、ご質問にも喜んでお答えいたします。
Go 言語の最も基本的なものの実際の例とその他のいくつかの実装は、私の GitHub のリンク

にあります。
リリースステートメント この記事は次の場所に転載されています: https://dev.to/maxflower/how-golang-will-solve-your-first-working-task-3kpc?1 侵害がある場合は、[email protected] に連絡して削除してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3