作为学习 Go 的练习,我正在编写一个基本的队列数据结构。我昨天开始学习接口,我认为在这个练习中尝试使用它们会很酷。我想要完成的是拥有一个Queue可以接受实现此接口的任何类型:
type Queuable interface {
Next() *Queuable // This is probably not right
}
基本上我想要的是能够将任何具有Next()方法的类型添加到我的Queue. 所以我尝试的是:
type Node struct {
value interface{}
next *Queuable
}
// Next gets the next object
func (n *Node) Next() *Queuable {
return n.next
}
// Job - A job for the queue
type Job struct {
instruction string
next *Queuable
}
// Next gets the next object
func (j *Job) Next() *Queuable {
return j.next
}
// Queue ...
type Queue struct {
head *Queuable
size int
}
我的方法看起来像:
func (q *Queue) Enqueue(node *Queuable) {
...
}
// Dequeue - Remove a Queueable form the Queue
func (q *Queue) Dequeue() *Queuable {
result := q.head
q.head = q.head.Next()
q.size--
return result
}
我收到了很多这样的错误(基本上在任何有任务的行上):
current.Next undefined (type *Queuable is pointer to interface, not interface)
所以最终我想做的是:
func main() {
queue := NewQueue() // Helper function not pictured
job := &Job{"some instructions", nil}
node := &Node{5, nil}
queue.Enqueue(node) // queue = [node]
queue.Enqueue(job) // queue = [node, job]
queue.Dequeue() // node
queue.Dequeue() // job
}
蛊毒传说
慕的地6264312
相关分类