0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語(Golang)のGroutineとChannelの基本

Posted at

ゴルーチン (Goroutine)

ゴルーチンは、軽量なスレッドのようなもので、Go言語では go キーワードを使用して定義します。ゴルーチンを使用することで、関数を非同期に実行することができます。以下のように基本的に使用します。

package main

import (
    "fmt"
    "time"
)

func sayHello() {
    fmt.Println("Hello, World!")
}

func main() {
    go sayHello() // ゴルーチンとして関数を非同期に実行
    time.Sleep(1 * time.Second) // 他のゴルーチンが実行される時間を確保するためにスリープ
}

上記の例では、sayHello関数がゴルーチンとして実行されるため、main関数は直ちに次の行に進みます。time.Sleepは、ゴルーチンが実行される時間を確保するために使われていますが、他の方法(チャネルを使った待機など)で同期をとることもできます。

チャネル (Channel)

チャネルは、ゴルーチン間でデータを通信するための構造です。チャネルを使うことで、異なるゴルーチンが安全にデータをやりとりできます。

チャネルは以下のように宣言できます:

ch := make(chan int) // 整数型のチャネルを作成

チャネルにデータを送信するには、<-演算子を使用します。また、データを受信するには、同様に<-を使用します。

以下にチャネルを使った例を示します。

package main

import (
    "fmt"
)

func worker(ch chan int) {
    // チャネルからデータを受信
    num := <-ch
    fmt.Println("Received:", num)
}

func main() {
    ch := make(chan int)
    go worker(ch) // ゴルーチンを起動

    // チャネルにデータを送信
    ch <- 42
}

この例では、worker 関数が、main から送られたデータを受信し、それを出力します。

並行処理の基本の流れ

  1. ゴルーチンを作成する。
  2. チャネルを使用してデータを送受信し、ゴルーチン間で通信する。
  3. 必要に応じて待機する。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?