LoginSignup
0
0

More than 3 years have passed since last update.

【Golang】ゴルーチン④range,close

Posted at

【Golang】ゴルーチン④range,close

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

package main

//channelのrangeとclose
//結果を随時出力

import (
    "fmt"
)

func goroutin2(s []int, c chan int) {
    sum := 0
    for _, v := range s {
        //全部足す
        sum += v
        //すぐに送る
        c <- sum
    }
    //終わったらchannelを閉じる
    //これ以上ない時は閉じる
    //閉じないと、中身以上取り出そうとしエラーになる
    close(c)
}

func main() {
    s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    //実質1つしか入らないので、バッファは1でもいい
    c := make(chan int, len(s))

    goroutin2(s, c)

    //go goroutine1(s, c)の結果をforで回す
    //channelの場合、インデックスは無く、値を出力
    //並列処理なので、値が入る度に出力される
    //回数分i変数に入力
    for i := range c {
        fmt.Println(i)
    }

    //中は0になる
    fmt.Println(len(c))

    /*
        1
        3
        6
        10
        15
        21
        28
        36
        45
        55
        0
    */
}

/*
別パターンが本にはある。スターティングGo言語 P191~P192
*/

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