zoukankan      html  css  js  c++  java
  • 《go语言程序设计》学习(四)

    一,自定义栈

    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,可以在不改变继承树的情况下就灵活的增加类型,方法,接口。

  • 相关阅读:
    Java网络编程注意事项3
    存储在图的形式——邻接矩阵(排列)
    C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)
    [Django1.6]south于django1.6使用
    《Javascript权威指南》13号学习笔记:使用日期和时间
    POJ 1699 Best Sequence (DFS+预处理)
    第五蓝桥杯 蚂蚁冷
    Mac OS X 在捕捉AppLAN通信包
    面向对象、内存模型、动态绑定
    链接器与分离编译
  • 原文地址:https://www.cnblogs.com/mruoli/p/4698741.html
Copyright © 2011-2022 走看看