Go 类型stack.stack没有方法推送
编写堆栈包Go 类型stack.stack没有方法推送,go,Go,编写堆栈包 package stack type Stack struct { data []interface{} } func (s *Stack) IsEmpty() bool { return len(s.data) == 0 } func (s *Stack) Push(item interface{}) { s.data = append(s.data, item) //fmt.Println(s.data, item) } func (s *
package stack
type Stack struct {
data []interface{}
}
func (s *Stack) IsEmpty() bool {
return len(s.data) == 0
}
func (s *Stack) Push(item interface{}) {
s.data = append(s.data, item)
//fmt.Println(s.data, item)
}
func (s *Stack) Pop() interface{} {
if len(s.data) == 0 {
return nil
}
index := len(s.data) - 1
res := s.data[index]
s.data = s.data[:index]
return res
}
然后试着给它打电话
package main
import (
s "library/stack"
t "library/tree"
)
func preorderTraversal(root *t.TreeNode) []int {
res := make([]int, 0)
if root == nil {
return res
}
// iterative
var stack *s.Stack
stack.Push(root)
// TODO: more logic
return res
}
func main() {
left := t.TreeNode{1, nil, nil}
right := t.TreeNode{2, nil, nil}
root := t.TreeNode{0, &left, &right}
fmt.Println(preorderTraversal(&root))
}
但我犯了个错误
stack.Push undefined (type *stack.Stack has no field or method Push)
这里的问题是什么
编辑:
添加树包只是为了方便
package tree
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
添加了基于Cerise Limón play.golang.org/p/E4JXjc-Pd0i的GoPlaydy代码,您肯定需要实例化
堆栈变量,而不仅仅是创建nil
指针。那么它应该会起作用:
stack:=&s.stack{}
堆栈推送(根)
注:
但让我有点困惑的是错误信息。当我运行您的程序时,它会死机:死机:运行时错误:无效内存地址或零指针解引用
在var stack*s.stack
中的s
到底是什么?它是堆栈
包的别名吗?奇怪的是错误消息。从您提供的代码中,错误消息应该是panic:runtime error:invalid memory address或nil pointer dereference
,因为变量堆栈中有一个nil指针,您正试图在Push
方法中使用它。@TehSphinX,对不起,我在调用程序中添加了包main。我试图在主包中实例化一个堆栈。编辑问题以显示一个堆栈。问题中的代码不会产生问题中显示的错误@切里塞利蒙,谢谢你!不知道这是你们在操场上发布多个模块的方式。将来会做的!我在帖子中添加了这个…这对我来说不起作用…得到了相同的错误。使用go版本go1.13.3 linux/AMD64是否确定,s.Stack
指的是类型Stack struct
。从你的错误来看,它似乎没有这样做,如果这个答案不能解决你的问题,那就是第二个指标,s.Stack
不是指你问题中的结构。问题解决了。我错误地放置了一个不同版本的库,它的堆栈API定义从小写开始。但是谢谢你的建议!不管怎样,这就是我真正想要达到的目标!