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定义从小写开始。但是谢谢你的建议!不管怎样,这就是我真正想要达到的目标!