关于 queue.Push() 方法

来源:4-1 结构体和方法

aznmoe

2018-12-24

老师,你好,我记得在 4-1节当中,在 setValue() 方法里面,设置 node 的值的时候 是直接 node.value = value (*node).value = value 亦可。而在 queue.Push 这里 为什么 q = append(q, v) 编译不通过了
queue.go 文件

package queue
type Queue []int
func (q *Queue) Push(v int) {
	q = append(q, v)
}

func (q *Queue) Pop() int {
	head := (*q)[0]
	*q = (*q)[1:]
	return head
}

func (q *Queue) IsEmpty() bool {
	return len(*q) == 0
}

main.go 文件

package main

import (
	"learn/queue"
)

func main() {
	q := queue.Queue{1}
	q.Push(2)
}
写回答

1回答

ccmouse

2018-12-26

编译不通过的话,出错是什么呢?q和v分别是什么类型?go语言的编译错误还是比较准的,一般顺着具体信息看能够解决。

0
2
ccmouse
回复
aznmoe
可以参考一下标准代码 https://git.imooc.com/coding-180/coding-180/src/master/lang/queue/queue.go 这里是*q=append(*q, v),不是q 编译也说了append必须是slice而不是*Queue。这里是C语言类似的指针语法。 Queue就是[]int的别名,是一个slice。但是q的类型是*Queue,也就是指向Queue的指针,它不是一个slice。但是*q就是对q取值,取出来就是q指向的那个Queue,也就是一个slice。
2018-12-29
共2条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程