无法从Go lang中的结构类型通道获取值

无法从Go lang中的结构类型通道获取值,go,goroutine,Go,Goroutine,参考示例,我想在作业初始化和终止之间添加预定义的延迟。我已经在地图中存储了数据,即jobid和waittime。然后,我将整个贴图复制到与map相同结构类型的通道中。但我无法在go例程调用中获取map值。请帮帮我,我是新手 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

参考示例,我想在作业初始化和终止之间添加预定义的延迟。我已经在地图中存储了数据,即jobid和waittime。然后,我将整个贴图复制到与map相同结构类型的通道中。但我无法在go例程调用中获取map值。请帮帮我,我是新手

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
}
}
更改:

a, b := <-jobs.id, <-jobs.waitime
致:

作业是通道而不是顶点。

更改:

a, b := <-jobs.id, <-jobs.waitime
致:


作业是一个通道而不是顶点。

您的代码有两个问题

首先,您不能直接从通道访问结构成员。也就是说,这一行是错误的:

a, b := <-jobs.id, <-jobs.waitime
但是现在,您的代码声明了b,但没有使用它。若要修复,请取消对time的调用的注释。睡眠:

但是这个电话是完全错误的。Sleep需要类型为time.Duration的参数,但不返回任何内容。若要修复,请进行以下更改:

time.Sleep(time.Duration(b) * time.Millisecond)

这应该可以让你的代码运行。

你的代码有两个问题

首先,您不能直接从通道访问结构成员。也就是说,这一行是错误的:

a, b := <-jobs.id, <-jobs.waitime
但是现在,您的代码声明了b,但没有使用它。若要修复,请取消对time的调用的注释。睡眠:

但是这个电话是完全错误的。Sleep需要类型为time.Duration的参数,但不返回任何内容。若要修复,请进行以下更改:

time.Sleep(time.Duration(b) * time.Millisecond)
这应该可以让你的代码运行