16.2.3 驱动程序

最后,这里是用于简单测试的主函数:

stack-demo/main.go

package main

import (
    "fmt"

    "gitlab.com/.../stack-demo/stack"
)

func main() {
    lStack := stack.New[int]()                        // 由于在这种情况下,类型参数不能被推断出来(例如,没有初始值),所以需要明确指定。在这个例子中,我们正在创建一个int元素的堆栈。也就是说,lStack的类型是*ListStack[int]。

    lStack.Push(1)                                    // 现在我们只能将int类型的元素推送到这个堆栈中,所以不需要指定类型参数
    lStack.Push(2)
    lStack.Push(3)
    fmt.Printf("Original Stack = %s\n", lStack)       // 为了使打印函数有效工作,ListStack[E]或其指针类型需要实现fmt.Stringer接口。我们将把它作为一个练习

    for {                                             // 无限的for循环
        if item, err := lStack.PopOrError(); err == nil { // if 语句。注意在布尔条件之前的简单语句
            fmt.Printf("Popped Item = %v\n", item)
            fmt.Printf("Current Stack = %s\n", lStack)
        } else {
            break                                     // 中断语句。如果堆栈变空,我们就停止for循环
        }
    }
}

最后更新于