美文网首页
golang-interface{} 类型使用

golang-interface{} 类型使用

作者: 爱吃豆包 | 来源:发表于2019-12-17 20:23 被阅读0次

interface{} 表示可以接纳所有的类型

未使用 interface{} 类型

package queue

// 声明一个类型 Queue 类型,这个类型是用 []int 切片实现的
type Queue []int

// 添加元素
func (q *Queue) Push(v int)  {
    // 这里使用指针,才可以把数据真正的添加进去,共外部可用
    *q = append(*q, v)
}

// 弹出顶层元素
func (q *Queue) Pop() int  {
    // 获取最顶层元素
    head := (*q)[0]
    // 把顶层元素剔除
    *q = (*q)[1:]

    return head
}

// 判断是否有值, 是否为empty
func (q *Queue) IsEmpty() bool {
    return len(*q) == 0
}


使用了 interface{} 类型,用例1

package queue

// 声明一个类型 Queue2 类型,这个类型是用 []interface {} 切片实现的,这个切片类型是interface{}
/**
    用 interface{} 表示,可以接收任何类型
 */
type Queue2 []interface {}

// 添加元素, 表示可以添加任何类型的元素
func (q *Queue2) Push(v interface{})  {
    // 这里使用指针,才可以把数据真正的添加进去,共外部可用
    *q = append(*q, v)
}

// 弹出顶层元素
func (q *Queue2) Pop() interface{}  {
    // 获取最顶层元素
    head := (*q)[0]
    // 把顶层元素剔除
    *q = (*q)[1:]

    return head
}

// 判断是否有值, 是否为empty
func (q *Queue2) IsEmpty() bool {
    return len(*q) == 0
}


使用了interface{} 类型。用例2

用例2里面,Push(v int) 在这里直接指定了 int 类型参数,是想表达我这里的无论是何种参数类型,都可以

package queue

// 声明一个类型 Queue2 类型,这个类型是用 []interface {} 切片实现的,这个切片类型是interface{}
/**
    用 interface{} 表示,可以接收任何类型
 */
type Queue3 []interface {}

// Push(v int) 在这里直接指定了 int 类型参数,是想表达我这里的无论是何种参数类型,都可以
// 添加元素, 我这里限定只能添加 int 类型元素
func (q *Queue3) Push(v int)  {
    // 这里使用指针,才可以把数据真正的添加进去,共外部可用
    *q = append(*q, v)
}

// 弹出顶层元素
// 我这里是用 Queue3 是 interface{} 类型,什么元素都可以添加
// 但是我现在只希望返回的类型是 int
func (q *Queue3) Pop() int  {
    // 获取最顶层元素
    head := (*q)[0]
    // 把顶层元素剔除
    *q = (*q)[1:]


    // 把值转换为 int
    return head.(int)
}

// 判断是否有值, 是否为empty
func (q *Queue3) IsEmpty() bool {
    return len(*q) == 0
}


main方法

package main

import (
    "fmt"
    "queue"
)

func main() {

    // 创建一个 Queue, 给个值 1
    q := queue.Queue{1}
    q.Push(2)
    q.Push(3)
    q.Push(4)

    fmt.Println(q.Pop())
    fmt.Println(q.Pop())
    fmt.Println("Queue 是否为empty : ", q.IsEmpty())
    fmt.Println(q)

}

相关文章

网友评论

      本文标题:golang-interface{} 类型使用

      本文链接:https://www.haomeiwen.com/subject/feuenctx.html