feat(json): 添加 JSON 编码示例和折扣产品结构
- 新增 DiscountedProduct 和 DiscountedProductChange 结构体 - 实现 mainJson 函数,包含多个 JSON 编码示例 - 更新 Product 结构体字段名称为导出形式 - 添加 mainJson1 到 mainJson7 的具体编码演示 -修复结构体标签和 JSON 序列化相关问题
This commit is contained in:
13
20-readersandwriters/readersandwriters/discount.go
Normal file
13
20-readersandwriters/readersandwriters/discount.go
Normal file
@@ -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:"-"`
|
||||
}
|
||||
@@ -16,6 +16,7 @@ func main() {
|
||||
main7()
|
||||
main8()
|
||||
main9()
|
||||
mainJson()
|
||||
}
|
||||
|
||||
func main1() {
|
||||
|
||||
230
20-readersandwriters/readersandwriters/mainJson.go
Normal file
230
20-readersandwriters/readersandwriters/mainJson.go
Normal file
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
3
23-htmltext/htmltext/go.mod
Normal file
3
23-htmltext/htmltext/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module htmltext
|
||||
|
||||
go 1.22
|
||||
5
23-htmltext/htmltext/main.go
Normal file
5
23-htmltext/htmltext/main.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package main
|
||||
|
||||
func main() {
|
||||
Printfln("Product: %v Price: %v", Kayak.Name, Kayak.Price)
|
||||
}
|
||||
7
23-htmltext/htmltext/printer.go
Normal file
7
23-htmltext/htmltext/printer.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func Printfln(template string, values ...interface{}) {
|
||||
fmt.Printf(template+"\n", values...)
|
||||
}
|
||||
23
23-htmltext/htmltext/product.go
Normal file
23
23-htmltext/htmltext/product.go
Normal file
@@ -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},
|
||||
}
|
||||
Reference in New Issue
Block a user