使用空接口实现可以保存任意值的字典
go语言中空接口可以用来保存任意类型的值,但是不能直接当成任意类型进行赋值和运算。下面设计使用map和interface{}实现一个可以关联任何类型的字典实例。
package main
import("fmt")
type Directionary struct{
data map[interface{}]interface{}
}
//设置Get方法
func (d *Directionary) Get(key interface{}) interface{}{
return d[key]
}
//设置Set方法
func (d *Directionary) Set(key, value interface{}){
d[key] = value
}
//遍历回调返回所有数据
func (d *Driectionary) Visit(callback func(k,v interface{}) bool){
if callback == nil{
return
}
for k,v := range d.data {
if !callback(k,v){
return
}
}
}
//主方法
func main(){
d := new(Directionary)
//设置数据
d.Set("my wife","wzx")
d.Set("my name","hzc")
d.Set("my car", "byd")
d.Set("my brother","wzh")
//获取数据
wife := d.Get("my wife")
fmt.Println(wife)
//遍历回调
d.Visit(func(key,value interface{}) bool {
if value.(string) == "wzx"{
fmt.Println("wzx is my wife")
return true
}
if value.(string) == "hzc" {
fmt.Println("this is me")
return true
}
fmt.Println("go back")
return true
})
}
以上代码首先定义一个结构体Directionary结构体,结构体中的数据为键值都是空接口类型的字典。然后实现Set,Get方法,再实现Visit函数遍历字段的所有键值关联数据。然后在main函数中实例化Directionary。进行设置数据测试,获取数据测试最后进行遍历数据测试。