《go语言程序设计》学习(四)

mruoli · · 1531 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一,自定义栈

package stack

import "errors"

type Stack []interface{}

func (stack *Stack) Pop(interface{}, error) {
    theStack := *stack
    if len(theStack) == 0 {
        return nil, errors.New("can't pop() an empty stack")
    }
    x := theStack[len(theStack)-1]
    *stack = theStack[:len(theStack)-1]
    return x, nil
}

func (stack *Stack) Push(x interface{}) {
    *stack = append(*stack, x)
}

func (stack *Stack) Top() (interface{}, error) {
    if len(stack) == 0 {
        return nil, errors.New("cat't top() an empty stack")
    }
    return stack[len(stack)-1], nil
}

func (stack Stack) Cap() int {
    return cap(stack)
}

func (stack Stack) Len() int {
    return len(stack)
}

func (stack Stack) IsEmpty() bool {
    return len(stack) == 0
}

作为一个包,首先是声明,如果是main包,那么就是要声明一个main函数,并能独立运行的。

然后包里面定义了stack说interface类型,并定义了很多stack的具体方法。

关于interface,interface是一群方法的合称,在一个interface里,可以包含一系列的具体方法。

golang中所有的类型都实现了空interface,所以可以把这些interface存储在stack中。

二,接口

在Go语言中,接口是一个自定义类型,它声明了一个或者多个方法签名,接口是完全抽象的,因此不能将其实例化。然而,可以创建一个其类型事接口的变量,它可以赋值为任何满足该接口类型的实际类型的值。

定义interface时候,接口名惯例用er结尾。

通过定义和使用interface,可以在不改变继承树的情况下就灵活的增加类型,方法,接口。

 


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:mruoli

查看原文:《go语言程序设计》学习(四)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1531 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传