diff --git a/20-readersandwriters/readersandwriters/discount.go b/20-readersandwriters/readersandwriters/discount.go new file mode 100644 index 0000000..398ea3a --- /dev/null +++ b/20-readersandwriters/readersandwriters/discount.go @@ -0,0 +1,13 @@ +package main + +type DiscountedProduct struct { + // *Product + *Product `json:",omitempty"` + Discount float64 `json:",string"` +} + +type DiscountedProductChange struct { + // *Product `json:"product"` + *Product `json:"product,omitempty"` + Discount float64 `json:"-"` +} diff --git a/20-readersandwriters/readersandwriters/main.go b/20-readersandwriters/readersandwriters/main.go index 235d98d..aa2b75d 100644 --- a/20-readersandwriters/readersandwriters/main.go +++ b/20-readersandwriters/readersandwriters/main.go @@ -16,6 +16,7 @@ func main() { main7() main8() main9() + mainJson() } func main1() { diff --git a/20-readersandwriters/readersandwriters/mainJson.go b/20-readersandwriters/readersandwriters/mainJson.go new file mode 100644 index 0000000..1ab23cc --- /dev/null +++ b/20-readersandwriters/readersandwriters/mainJson.go @@ -0,0 +1,230 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "strings" +) + +func mainJson() { + mainJson1() + mainJson2() + mainJson3() + mainJson4() + mainJson5() + mainJson6() + mainJson7() + mainJson8() + mainJson9() + mainJson10() + mainJson11() +} + +func mainJson1() { + Printfln("\nmainJson1") + b := true + str := "hello" + fVal := 99.99 + iVal := 200 + pointer := &iVal + + var writer strings.Builder + encoder := json.NewEncoder(&writer) + + for _, val := range []interface{}{b, str, fVal, iVal, pointer} { + err := encoder.Encode(val) + if err != nil { + Printfln("Error: %v", err.Error()) + return + } + } + fmt.Println(writer.String()) +} + +func mainJson2() { + Printfln("\nmainJson2") + + names := []string{"Kayak", "Lifejacket", "Soccer Ball"} + numbers := [3]int{1, 2, 3} + numberSlice := []int{1, 2, 3} + var byteArray [5]byte + copy(byteArray[0:], []byte(names[0])) + byteSlice := []byte(names[0]) + + var writer strings.Builder + encoder := json.NewEncoder(&writer) + + encoder.Encode(names) + encoder.Encode(numbers) + encoder.Encode(numberSlice) + encoder.Encode(byteArray) + encoder.Encode(byteSlice) + + fmt.Println(writer.String()) +} + +func mainJson3() { + Printfln("\nmainJson3") + m := map[string]float64{ + "Kayak": 275, + "Lifejacket": 48.95, + } + + var writer strings.Builder + encoder := json.NewEncoder(&writer) + encoder.Encode(m) + fmt.Println(writer.String()) +} + +func mainJson4() { + Printfln("\nmainJson4") + + var writer strings.Builder + encoder := json.NewEncoder(&writer) + encoder.Encode(&Kayak) + fmt.Println(writer.String()) +} +func mainJson5() { + Printfln("\nmainJson5") + var writer strings.Builder + encoder := json.NewEncoder(&writer) + + dp := DiscountedProduct{ + Product: &Kayak, + Discount: 10.50, + } + encoder.Encode(&dp) + fmt.Println(writer.String()) +} +func mainJson6() { + Printfln("\nmainJson6") + var writer strings.Builder + encoder := json.NewEncoder(&writer) + + dp := DiscountedProductChange{ + Product: &Kayak, + Discount: 10.50, + } + encoder.Encode(&dp) + fmt.Println(writer.String()) +} + +func mainJson7() { + Printfln("\nmainJson7") + var writer strings.Builder + encoder := json.NewEncoder(&writer) + + dp := DiscountedProductChange{ + Product: &Kayak, + Discount: 10.50, + } + encoder.Encode(&dp) + + dp2 := DiscountedProductChange{ + Discount: 10.50, + } + encoder.Encode(&dp2) + + dp3 := DiscountedProduct{ + Discount: 10.50, + } + encoder.Encode(&dp3) + + fmt.Println(writer.String()) +} + +func mainJson8() { + Printfln("\nmainJson8") + + reader := strings.NewReader(`{"Kayak":279,"Lifejacket":49.95}`) + + m := map[string]interface{}{} + + decoder := json.NewDecoder(reader) + + err := decoder.Decode(&m) + if err != nil { + Printfln("Error: %v", err.Error()) + } else { + Printfln("Map: %T , %v", m, m) + for key, value := range m { + Printfln("Key: %v, Value: %v", key, value) + } + + Printfln("Kayak: %v", m["Kayak"]) + Printfln("Lifejacket: %v", m["Lifejacket"]) + } +} + +func mainJson9() { + Printfln("\nmainJson9") + + reader := strings.NewReader(`{"Kayak":279,"Lifejacket":49.95}`) + + m := map[string]float64{} + + decoder := json.NewDecoder(reader) + + err := decoder.Decode(&m) + if err != nil { + Printfln("Error: %v", err.Error()) + } else { + Printfln("Map: %T , %v", m, m) + for key, value := range m { + Printfln("Key: %v, Value: %v", key, value) + } + + Printfln("Kayak: %v", m["Kayak"]) + Printfln("Lifejacket: %v", m["Lifejacket"]) + } +} + +func mainJson10() { + Printfln("\nmainJson10") + reader := strings.NewReader(` + { "Name": "Kayak" , "Category": "Watersports","Price":270} + { "Name": "Lifejacket" , "Category": "Watersports" } + { "name": "Canoe" , "category": "Watersports" , "price" : 100 , "inStock" : true } +`) + decoder := json.NewDecoder(reader) + + for { + var val Product + err := decoder.Decode(&val) + if err != nil { + if err == io.EOF { + break + } + Printfln("Error: %v", err.Error()) + break + } else { + Printfln("Name: %v, Category: %v, Price: %v", val.Name, val.Category, val.Price) + } + } +} + +func mainJson11() { + Printfln("\nmainJson10") + reader := strings.NewReader(` + { "Name": "Kayak" , "Category": "Watersports","Price":270} + { "Name": "Lifejacket" , "Category": "Watersports" } + { "name": "Canoe" , "category": "Watersports" , "price" : 100 , "inStock" : true } +`) + decoder := json.NewDecoder(reader) + decoder.DisallowUnknownFields() + + for { + var val Product + err := decoder.Decode(&val) + if err != nil { + if err == io.EOF { + break + } + Printfln("Error: %v", err.Error()) + break + } else { + Printfln("Name: %v, Category: %v, Price: %v", val.Name, val.Category, val.Price) + } + } +} diff --git a/20-readersandwriters/readersandwriters/product.go b/20-readersandwriters/readersandwriters/product.go index aea225e..93c0860 100644 --- a/20-readersandwriters/readersandwriters/product.go +++ b/20-readersandwriters/readersandwriters/product.go @@ -1,13 +1,13 @@ package main type Product struct { - Name, category string + Name, Category string Price float64 } var Kayak = Product{ Name: "Kayak", - category: "Watersports", + Category: "Watersports", Price: 279, } diff --git a/23-htmltext/htmltext/go.mod b/23-htmltext/htmltext/go.mod new file mode 100644 index 0000000..1252fa8 --- /dev/null +++ b/23-htmltext/htmltext/go.mod @@ -0,0 +1,3 @@ +module htmltext + +go 1.22 diff --git a/23-htmltext/htmltext/main.go b/23-htmltext/htmltext/main.go new file mode 100644 index 0000000..7c9eea0 --- /dev/null +++ b/23-htmltext/htmltext/main.go @@ -0,0 +1,5 @@ +package main + +func main() { + Printfln("Product: %v Price: %v", Kayak.Name, Kayak.Price) +} diff --git a/23-htmltext/htmltext/printer.go b/23-htmltext/htmltext/printer.go new file mode 100644 index 0000000..bd0e8c9 --- /dev/null +++ b/23-htmltext/htmltext/printer.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func Printfln(template string, values ...interface{}) { + fmt.Printf(template+"\n", values...) +} diff --git a/23-htmltext/htmltext/product.go b/23-htmltext/htmltext/product.go new file mode 100644 index 0000000..93c0860 --- /dev/null +++ b/23-htmltext/htmltext/product.go @@ -0,0 +1,23 @@ +package main + +type Product struct { + Name, Category string + Price float64 +} + +var Kayak = Product{ + Name: "Kayak", + Category: "Watersports", + Price: 279, +} + +var ProductList = []Product{ + {"Kayak", "Watersports", 279}, + {"LifeJacket", "Watersports", 49.95}, + {"Soccer Ball", "Soccer", 19.50}, + {"Corner Flags", "Soccer", 34.95}, + {"Stadium", "Soccer", 79500}, + {"Thinking Cap", "Chess", 16}, + {"Unsteady Chair", "Chess", 75}, + {"Bling-Bling King", "Chess", 1200}, +}