| @ -0,0 +1,4 @@ | |||
| { | |||
| "Name": "Torsten", | |||
| "Age": 41 | |||
| } | |||
| @ -0,0 +1,65 @@ | |||
| package main | |||
| import ( | |||
| "encoding/json" | |||
| "fmt" | |||
| "io" | |||
| "os" | |||
| "strings" | |||
| ) | |||
| type Person struct { | |||
| Name string `json:"name"` | |||
| Age int `json:"age"` | |||
| } | |||
| func loadPerson2(s string) (Person, error) { | |||
| var p Person | |||
| err := json.NewDecoder(strings.NewReader(s)).Decode(&p) | |||
| if err != nil { | |||
| return p, err | |||
| } | |||
| return p, nil | |||
| } | |||
| func loadPerson(r io.Reader) (Person, error) { | |||
| var p Person | |||
| err := json.NewDecoder(r).Decode(&p) | |||
| if err != nil { | |||
| return p, err | |||
| } | |||
| return p, nil | |||
| } | |||
| func main() { | |||
| s := `{"Name":"Joe","Age":18}` | |||
| s2 := `{"Name":"Jane","Age":21}` | |||
| p, err := loadPerson(strings.NewReader(s)) | |||
| if err != nil { | |||
| fmt.Println(err) | |||
| } | |||
| fmt.Println(p) | |||
| p2, err := loadPerson2(s2) | |||
| if err != nil { | |||
| fmt.Println(err) | |||
| } | |||
| fmt.Println(p2) | |||
| f, err := os.Open("data.json") | |||
| if err != nil { | |||
| fmt.Println(err) | |||
| } | |||
| p3, err := loadPerson(f) | |||
| if err != nil { | |||
| fmt.Println(err) | |||
| } | |||
| fmt.Println(p3) | |||
| } | |||
| @ -0,0 +1,33 @@ | |||
| package main | |||
| import "fmt" | |||
| type Speaker interface { | |||
| Speak() string | |||
| } | |||
| type cat struct { | |||
| name string | |||
| } | |||
| func catDetails(c cat) { | |||
| fmt.Printf("(%v, %T)\n", c, c) | |||
| } | |||
| func emptyDetails(s interface{}) { | |||
| fmt.Printf("(%v, %T)\n", s, s) | |||
| } | |||
| func main() { | |||
| c := cat{"oreo"} | |||
| i := 99 | |||
| b := false | |||
| str := "test" | |||
| catDetails(c) | |||
| emptyDetails(c) | |||
| emptyDetails(i) | |||
| emptyDetails(b) | |||
| emptyDetails(str) | |||
| } | |||
| @ -0,0 +1,31 @@ | |||
| package main | |||
| import "fmt" | |||
| type cat struct { | |||
| name string | |||
| } | |||
| func typeExample(i []interface{}) { | |||
| for _, x := range i { | |||
| switch v := x.(type) { | |||
| case int: | |||
| fmt.Printf("%v is an int\n", v) | |||
| case string: | |||
| fmt.Printf("%v is a string\n", v) | |||
| case bool: | |||
| fmt.Printf("%v is a boolean\n", v) | |||
| default: | |||
| fmt.Printf("Unknown type %T\n", v) | |||
| } | |||
| } | |||
| } | |||
| func main() { | |||
| c := cat{"oreo"} | |||
| i := []interface{}{42, "The book club", true, c} | |||
| typeExample(i) | |||
| } | |||
| @ -0,0 +1,72 @@ | |||
| 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() | |||
| } | |||
| } | |||