私が今日学んだもの- 5 -非同期としてGolangチャンネルを使うこと


JavaScriptを使用するのに慣れている人々のために、彼らは確かにAsync/Waitを使用したか、聞いたことがあります、それは非同期プログラミングで働くことができる言語の特徴です.
ゴランは、これは非常にスムーズに使用されることができますが、しかし、ちょうど言語に来ている人々は、それを行う方法を知らないかもしれないが、ベースを持っている、私は理解するのに役立つ例を準備しています.
我々は、パブリックPokapi APIを使用します.

JavaScriptの使い方
const awaitTask = async () => {
    let response = await fetch('https://pokeapi.co/api/v2/pokemon/ditto');

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response
  }

awaitTask()
    .then(r => r.json())
    .then(r => console.log(r))

どのようにゴングでそれを行う
package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func awaitTask() <-chan string {
    fmt.Println("Starting Task...")

    c := make(chan string)

    go func() {
        resp, err := http.Get("https://pokeapi.co/api/v2/pokemon/ditto")
        if err != nil {
            log.Fatalln(err)
        }

        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            log.Fatalln(err)
        }

        c <- string(body)

        fmt.Println("...Done!")
    }()

    return c
}

func main() {
    value := <-awaitTask()

    fmt.Println(value)
}
作り方
  • 戻り値型をチャネルに設定します.
  • 値を返すチャネルを作成します.
  • 非同期実行のためにgo funcを追加します.
  • 機能の範囲内で
  • は、値をチャンネルに割り当てます.
  • 関数の最後に、値を持つチャネルの戻り値を示します.
  • 主な機能で
  • で、チャンネルのリターンを変数に割り当てます.
  • あなたが人々が加える何かを持っているならば、私はここを通して読まれた誰にでも感謝しますコメントを残してください.