diff --git a/headFirst/generics/go.mod b/headFirst/generics/go.mod new file mode 100644 index 0000000..9d24355 --- /dev/null +++ b/headFirst/generics/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.25.1 diff --git a/headFirst/generics/main.go b/headFirst/generics/main.go new file mode 100644 index 0000000..38eb1f0 --- /dev/null +++ b/headFirst/generics/main.go @@ -0,0 +1,67 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" +) + +type Message struct { + Key string `json:"id"` + Val string `json:"user"` +} + +type Receiver struct { + First string `json:"id"` + Second string `json:"user"` +} + +type Test struct { + Name string + Age float64 + Parents []string +} + + +func main() { + m := Message{"lol","kek"} + b,err := json.Marshal(m) + if err != nil { + log.Fatalln("Couldn marshal") + } + fmt.Println("Binary format on marshalled JSON is ",b) + fmt.Println("This is how lookg in string ",string(b)) + + var k Receiver + err = json.Unmarshal(b,&k) + if err != nil { + log.Fatalln("Couldn UNmarshal") + } + // fmt.Println("This is how looks unmarshalled JSON ", k) + + b = []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`) + var f interface{} + _ = json.Unmarshal(b,&f) + fmt.Println(f) + + l := f.(map[string]interface{}) + for k, v := range l { + switch vv := v.(type) { + case string: + fmt.Println(k, "is string", vv) + case float64: + fmt.Println(k, "is float64", vv) + case []interface{}: + fmt.Println(k, "is an array:") + for i, u := range vv { + fmt.Println(i, u) + } + default: + fmt.Println(k, "is of a type I don't know how to handle") + } + } + + var e Test + _ = json.Unmarshal(b,&e) + fmt.Println(e) +}