package main
|
|
|
|
import "fmt"
|
|
|
|
type record struct {
|
|
key string
|
|
valueType string
|
|
data interface{}
|
|
}
|
|
|
|
type person struct {
|
|
lastName string
|
|
age int
|
|
isMarried bool
|
|
}
|
|
|
|
type animal struct {
|
|
name string
|
|
category string
|
|
}
|
|
|
|
func newRecord(key string, i interface{}) record {
|
|
|
|
r := record{}
|
|
r.key = key
|
|
|
|
switch v := i.(type) {
|
|
case int:
|
|
r.valueType = "int"
|
|
r.data = v
|
|
case bool:
|
|
r.valueType = "bool"
|
|
r.data = v
|
|
case string:
|
|
r.valueType = "string"
|
|
r.data = v
|
|
case person:
|
|
r.valueType = "person"
|
|
r.data = v
|
|
default:
|
|
r.valueType = "unknown"
|
|
r.data = v
|
|
}
|
|
return r
|
|
|
|
}
|
|
|
|
func main() {
|
|
|
|
m := make(map[string]interface{})
|
|
a := animal{name: "oreo", category: "cat"}
|
|
p := person{lastName: "Doe", isMarried: false, age: 19}
|
|
m["person"] = p
|
|
m["animal"] = a
|
|
m["age"] = 54
|
|
m["isMarried"] = true
|
|
m["lastName"] = "Smith"
|
|
|
|
rs := []record{}
|
|
for k, v := range m {
|
|
r := newRecord(k, v)
|
|
rs = append(rs, r)
|
|
}
|
|
|
|
for _, v := range rs {
|
|
fmt.Println("Key:", v.key)
|
|
fmt.Println("Data:", v.data)
|
|
fmt.Println("Type:", v.valueType)
|
|
fmt.Println()
|
|
}
|
|
|
|
}
|