包含结构体的 Golang 类型数组

4

我正在尝试创建一个伪队列结构,并将工作结构体插入其中。我做错了什么吗?

import "fmt"

type Job struct {
    Type string
    Url string
}

type Queue [] Job

func main() {
    var queue []Queue
    job   := Job{"test", "http://google.com"}

    queue[0] = job
    fmt.Println(queue)
}

上面的代码出现了以下错误信息:

无法将 job (类型为 Job) 分配给 Queue 类型


2
var queue []Queue 中删除 [],虽然仍会出现运行时错误。 - cshu
3个回答

5

我认为问题出在这里:

var queue []Queue

这里的 queue 是一个 Queue 或者是 Job 的切片或切片的切片。因此,不可能直接为其元素值的 Job 赋值。

尝试:

var queue Queue

你说得对,但现在它抛出了:panic: runtime error: index out of range。我添加了queue = append(queue, job),并且现在通过了上述修改。谢谢。 - bthe0
@TheodorB,非常正确,因为queue刚被创建,并没有零号元素。可以使用append添加这个元素。您是否已经检查了片段的lencap函数? - Eugene Lisitsky
还没有,但我会看一下。再次感谢您的回答。 - bthe0

5

不需要切片队列,也不应该对空切片进行索引。

package main

import "fmt"

type Job struct {
    Type string
    Url string
}

type Queue []Job

func main() {
    var q Queue
    job := Job{"test", "http://google.com"}
    q = append(q, job)
    fmt.Println(q)
}

0

[]TypeNameTypeName 类型的切片定义。

就像它所说的:

var queue []QueueQueue 类型实例的切片。

q := Queue{Job{"test", "http://google.com"}, Job{"test", "http://google.com"}}

肯定不是你想要的。你应该声明var queue Queue,而不是它:

var queue Queue
q := append(queue, Job{"test", "http://google.com"}, Job{"test", "http://google.com"})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接