ホームページ バックエンド開発 Golang Golang が最初の作業タスクをどのように解決するか

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

Jul 17, 2024 pm 09:50 PM

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://<use your id after sign up>.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 <- err
        return
    }
    usersChan <- user
}()

select {
case users := <-usersChan:
    fmt.Printf("Fetched users: %+v\n", users)
case err := <-errChan:
    fmt.Printf("Error fetching users: %v\n", err)
case <-ctx.Done():
    fmt.Println("Request timed out")
}
ログイン後にコピー

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

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

追伸

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

以上がGolang が最初の作業タスクをどのように解決するかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Golang vs. Python:長所と短所 Golang vs. Python:長所と短所 Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalables Systemsduetoitsefficiency andConcurrency、Whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityand vastecosystem.golang'ssignencouragesclean、readisinediteNeditinesinedinediseNabletinedinedinedisedisedioncourase

See all articles