例として、 thisを参照して、ジョブの初期化と終了の間に定義済みの遅延を追加します。私はmapidにjobidとwaittimeというデータを保存しました。それから私は地図と同じ構造体型のチャンネルで地図全体をコピーしました。しかし、私は行くルーチン呼び出しでマップ値を取得することができません。私を助けてください、私は新しく行きます。Go langのstruct typeチャネルから値を取得できません
package main
import "fmt"
type Vertex struct {
id, waitime int
}
var m = map[int]Vertex{
1: {1, 1000},
2: {2, 2000},
3: {3, 1000},
4: {4, 2000},
5: {5, 1000},
6: {6, 2000},
7: {7, 1000},
8: {8, 2000},
9: {9, 1000},
10: {10, 2000},
}
func worker(w int, jobs <-chan Vertex, results chan<- int) {
for j := 1; j <= len(m); j++ {
a, b := <-jobs.id, <-jobs.waitime
fmt.Println("worker", w, "started job", a)
//time.Sleep(time.Sleep(time.Duration(b)))
fmt.Println("worker", w, "finished job", a)
results <- j * 2
}
}
func main() {
//n := 5
jobs := make(chan Vertex, 100)
results := make(chan int, 100)
for w := 1; w <= 5; w++ {
go worker(w, jobs, results)
}
fmt.Println(len(m))
for j := 1; j <= len(m); j++ {
jobs <- m[j]
}
//close(jobs)
for a := 1; a <= len(m); a++ {
<-results
}
}