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)
}













网友评论