[ā§Ģ.⧍] āĻĄāĻžāĻāĻž āĻĒāĻžāϰā§āϏāĻŋāĻ āĻāĻŦāĻ āĻŽā§āϝāĻžāύāĻŋāĻĒā§āϞā§āĻļāύ (Data parsing & manipulation)
[ā§Ģ.⧍.ā§§] JSON
JSON āĻāϰ āĻĒā§āϰā§āĻŖāϰā§āĻĒ āĻšāϞ⧠JavaScript Object Notation, āϝā§āĻāĻž āĻāĻāĻāĻŋ āĻŦāĻšā§āϞ āĻŦā§āϝāĻŦāĻšā§āϤ āĻĄāĻžāĻāĻž āĻāύā§āĻāĻžāϰāĻā§āĻā§āĻ – āĻĢāϰāĻŽā§āϝāĻžāĻ. āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϝāĻŧā§āĻŦ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻŦāĻ API āĻĄā§āĻāϞāĻĒāĻžāϰāϰāĻž āĻāĻŋāύā§āύ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻŦāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāϰ āĻŽāĻžāĻā§ JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻĄāĻžāĻāĻž āĻāĻā§āϏāĻā§āĻā§āĻ āĻāϰā§, āĻā§āύāύāĻž JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻĄāĻžāĻāĻž āĻāĻā§āϏāĻā§āĻā§āĻ āĻāϰāĻž āĻā§āĻŦāĻ āϏāĻšāĻāĨ¤Â
JSON āĻĄāĻžāĻāĻž āύāĻŋāϝāĻŧā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ Go āĻāϰ âencoding/jsonâ āĻĒā§āϝāĻžāĻā§āĻā§āϰ āĻŦā§āĻļ āĻāĻŋāĻā§ āĻŦāĻŋāϞā§āĻ-āĻāύ āĻĢāĻžāĻāĻļāύ āϰāϝāĻŧā§āĻā§āĨ¤
- json.marshal():Â
āϝ⧠āĻā§āύ āĻĄāĻžāĻāĻž āĻāĻžāĻāĻĒ āĻāϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ āĻā§ āĻā§āϏāύ āĻĢāϰāĻŽā§āϝāĻžāĻ āĻ āĻāύāĻā§āĻĄ āĻāϰ⧠–
// Boolean values encode as JSON booleans
var boolean = true
bolB, _ := json.Marshal(boolean)
for i := range bolB {
fmt.Print(string(bolB[i]))
}
āĻāĻāĻāĻĒā§āĻ:
true
āĻāĻ āĻā§āĻĄ āĻĨā§āĻā§ āĻŦā§āĻāĻž āϝāĻžāĻā§āĻā§ āϝā§, boolean āĻā§āϝāĻžāϞā§āĻāĻŋāĻā§ āĻā§ json.Marshal() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž byte āĻāĻžāĻāĻĒā§āϰ āĻ ā§āϝāĻžāϰā§āϤ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻāĻŋ, āϝā§āĻāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻž āĻāϞāĻŋāĻŽā§āύā§āĻāĻā§ āĻāĻŽāϰāĻžÂ string āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āĻĒāϰāĻĒāϰ āĻā§āϝāĻžāϰā§āĻā§āĻāĻžāϰāĻā§āϞ⧠āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻāĻŋāĨ¤ āĻŽā§āϞāϤāĻ āĻāĻāĻžāύā§, boolean āĻā§āϝāĻžāϞ⧠true āĻĨā§āĻā§ string āĻā§āϝāĻžāϞ⧠“true” āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
āĻāϰāĻāĻŽ āĻāĻžāĻŦā§ āĻāĻŽāϰāĻž int, āĻĢā§āϞā§āĻ, string āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞāĻā§ []byte āĻ convert āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ, āϝā§āĻāĻžāĻā§ āĻŦā§āĻāĻžāϰ āĻāύā§āϝ āĻŽā§āϞāϤāĻ string āĻ convert āĻāϰāĻž āĻšāĻā§āĻā§āĨ¤
intB, _ := json.Marshal(1)
fmt.Println(string(intB))
fltB, _ := json.Marshal(2.34)
fmt.Println(string(fltB))
strB, _ := json.Marshal("Gopher")
fmt.Println(string(strB))
āĻāĻāĻāĻĒā§āĻ:
1
2.34
"Gopher"
āĻāĻāĻžāύā§āϰ āϏāĻŦ āĻā§āϞāĻž āĻāĻĻāĻžāĻšāϰāĻŖā§ Marshal() āĻĢāĻžāĻāĻļāύ āĻāĻž JSON āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ byte āĻ ā§āϝāĻžāϰ⧠āĻĻāĻŋāĻŦā§, āύāϤā§āĻŦāĻž āĻāϰāϰ āĻĻāĻŋāĻŦā§ (āĻāĻāĻžāύ⧠āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āϏā§āĻŦāĻŋāϧāĻžāϰā§āĻĨā§, ‘_’ āĻĻāĻŋā§ā§ āϤāĻž ignore āĻāϰāĻž āĻšā§ā§āĻā§, āĻāĻŋāύā§āϤ⧠āĻŦāĻžāϏā§āϤāĻŦ āĻā§āĻŦāύ⧠āϝā§āĻā§āύ⧠āĻĒā§āϰāĻā§āĻā§āĻ āĻāϰāϤ⧠āĻā§āϞ⧠āĻ āĻŦāĻļā§āϝāĻ āĻāĻ āĻāϰāϰāĻā§āϞ⧠āĻā§āĻ āĻāϰāĻž āϞāĻžāĻāĻŦā§āĨ¤Â
āĻā§āύ⧠āĻ ā§āϝāĻžāϰā§āĻā§āĻ āĻāĻŽāϰāĻž JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ āύāĻŋā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰāĻŋ –
slcD := []string{"apple", "peach", "pear"}
fmt.Println("before:", slcD)
slcB, _ := json.Marshal(slcD)
fmt.Println("after:",string(slcB))
āĻāϰ āĻāĻāĻāĻĒā§āĻ –
before: [apple peach pear]
after: ["apple","peach","pear"]
āĻāĻŋāύā§āϤ⧠āĻāĻŽāϰāĻž āϝāĻĻāĻŋ JSON āĻāϰ āĻāĻŋ-āĻā§āϝāĻžāϞ⧠āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻĒā§āϤ⧠āĻāĻžāĻ, āϤāĻžāĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āϞāĻžāĻāĻŦā§ map/struct –
mapD := map[string]int{"apple": 5, "lettuce": 7}
mapB, _ := json.Marshal(mapD)
fmt.Println(string(mapB))
āĻāĻ āĻā§āĻĄā§āϰ āĻāĻāĻāĻĒā§āĻ –
{"apple":5,"lettuce":7}
āĻāĻāĻžāύ⧠Map āĻāϰ āĻāĻŋāϤāϰā§āϰ āϏāĻŦ āĻāϞāĻŋāĻŽā§āύā§āĻ āĻāĻāĻ āĻĄāĻžāĻāĻž āĻāĻžāĻāĻĒā§āϰāĨ¤ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ āĻāĻŽāύ JSON āĻ āĻŦāĻā§āĻā§āĻ āĻāĻžāĻ āϝā§āĻāĻžāύ⧠āĻāĻā§āĻ āĻĢāĻŋāϞā§āĻĄ āĻāĻā§āĻ āĻāĻžāĻāĻĒā§āϰ, āϤāĻžāĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ Struct āĻāĻāĻ āĻāϰāĻž āϞāĻžāĻāĻŦā§(āĻ āĻĨāĻŦāĻž map āĻāϰ āĻā§āϝāĻžāϞ⧠āĻšāĻŋāϏā§āĻŦā§ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻĻāĻŋāϤ⧠āĻšāĻŦā§)āĨ¤ āĻāĻāĻžāύā§Â āĻāĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻŦāĻŋāώ⧠āĻšāϞā§āĻ Struct āĻāϰ field āĻā§āϞā§āϰ āύāĻžāĻŽ āĻ āĻŦāĻļā§āϝāĻ āĻŦā§ āĻšāĻžāϤā§āϰ āĻ āĻā§āώāϰ āĻĻāĻŋā§ā§ āĻļā§āϰ⧠āĻšāϤ⧠āĻšāĻŦā§ āϝāĻĻāĻŋ āϏā§āĻā§āϞ⧠āĻāĻā§āϏāĻĒā§āϰā§āĻā§āĻŦāϞ āĻāϰāϤ⧠āĻāĻžāĻāĨ¤–Â
type response1 struct {
Page int
Fruits []string
}
res1D := &response1{
Page: 1,
Fruits: []string{"apple", "peach", "pear"},
}
res1B, _ := json.Marshal(res1D)
fmt.Println(string(res1B))
āĻāĻāĻāĻĒā§āĻ –
{"Page":1,"Fruits":["apple","peach","pear"]}
āĻāĻŽāϰāĻž āĻāĻžāĻāϞā§, JSON āĻāϰ key āĻā§āϞ⧠āĻāĻžāϏā§āĻāĻŽ āĻāϰ⧠āύāĻŋāϤ⧠āĻĒāĻžāϰāĻŋ, āĻāϰ āĻāύā§āϝ Struct āĻāϰ āĻĢāĻŋāϞā§āĻĄ āĻā§āϞā§āϰ āĻĒāĻžāĻļā§ JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ key āĻāϰ āύāĻžāĻŽ āĻāĻŋ āĻšāĻŦā§ āϤāĻž âjsonâ āĻā§āϝāĻžāĻ āĻĻāĻŋā§ā§ āĻŦāϞ⧠āĻĻāĻŋāϤ⧠āĻšāĻŦā§āĨ¤ āύāĻŋāĻā§āϰ āĻā§āĻĄāĻāĻŋ āĻā§ā§āĻžāϞ āĻāϰāĻŋ –
type response2 struct {
Page int `json:"page-number"`
Fruits []string `json:"fruits-List"`
}
res1D := &response2{
Page: 1,
Fruits: []string{"apple", "peach", "pear"},
}
res1B, _ := json.Marshal(res1D)
fmt.Println(string(res1B))
JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§āϰ key āĻā§āϞ⧠āĻā§ā§āĻžāϞ āĻāϰāĻŋ –
{"page-number":1,"fruits-List":["apple","peach","pear"]}
- json.Unmarshal():Â
āĻāĻāĻž āĻŽā§āϞāϤ JSON āĻĄāĻžāĻāĻž āĻĄāĻŋāĻā§āĻĄ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§, āĻāĻŋāĻā§ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āύāĻŋā§āĻŽāϏāĻš, āĻāĻāĻŋ Marshal() āĻāϰ āĻ āĻŋāĻ āĻāϞā§āĻā§āĨ¤ āĻāĻŽāĻžāĻĻā§āϰ āϝ⧠āĻā§āύ āĻāĻāĻāĻž āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ āĻŦāϞ⧠āĻĻāĻŋāϤ⧠āĻšā§, āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻĄāĻŋāĻā§āĻĄā§āĻĄ JSON āĻ āĻŦāĻā§āĻā§āĻ āĻā§ āϰāĻžāĻāĻŦāĨ¤
Syntax –Â
func Unmarshal(data []byte, v any) error
āϝāĻĻāĻŋ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ null āĻšā§, āϤāĻžāĻšāϞ⧠InvalidUnmarshalError āĻĻāĻŋāĻŦā§āĨ¤Â Â
āύāĻŋāĻā§āϰ āĻā§āĻĄāĻāĻž āĻā§ā§āĻžāϞ āĻāϰāĻŋ –
byt := []byte(
`
{
"num":6.13,
"strs":["a","b"]
}
`,
)
var v map[string]interface{}
if err := json.Unmarshal(byt, &v); err != nil {
panic(err)
}
fmt.Println(v)
āĻāĻāĻžāύ⧠āĻāĻŽāϰāĻž āϝāĻĻāĻŋ āĻāĻāĻāĻŋ JSON āĻ āĻŦāĻā§āĻā§āĻ āĻā§ āĻāĻŽāύ āĻāĻāĻāĻŋ Map āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻāĻžāĻ, āϝā§āĻāĻžāύ⧠key āĻā§āϞ⧠āĻšāĻŦā§ string āĻāĻŦāĻ key āĻāϰ āĻā§āϝāĻžāϞ⧠āϝā§āĻā§āύ⧠āĻāĻŋāĻā§āĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻāĻāĻĒā§āĻ:
map[num:6.13 strs:[a b]]
āϤāĻŦā§ āĻāĻ āĻĒāĻĻā§āĻŦāϤāĻŋāϰ āĻāĻāĻāĻŋ āϏāĻŽāϏā§āϝāĻž āĻšāϞā§, āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ Map āĻāϰ āĻā§āϝāĻžāϞā§āĻā§āϞ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻāĻĒ āĻāĻžāϏā§āĻāĻŋāĻ āĻāϰ⧠āύāĻŋāϤ⧠āĻšāĻŦā§, (āĻā§āύāύāĻž āĻāĻŽāϰāĻž āĻā§āϝāĻžāϞ⧠āĻā§āϞāĻž interface{} āĻšāĻŋāϏā§āĻŦā§ āύāĻŋā§ā§āĻāĻŋ)āĨ¤ āĻāĻāĻžāϰ āĻāύā§āϝ āϝāĻĻāĻŋ āĻā§āύ āĻā§āϞ āĻšā§ āϤāĻžāĻšāϞ⧠āϰāĻžāύāĻāĻžāĻāĻŽ āĻāϰāϰ āĻšāĻŦā§, āϝā§āĻāĻž āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰāĻž āĻā§āĻŦāĻ āĻāĻžāĻŽā§āϞāĻžāϰ āĻŦāĻŋāώā§āĨ¤ āϤāĻžāĻ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ āĻāĻā§ āĻĨā§āĻā§āĻ, āĻĄāĻŋāĻā§āĻĄā§āĻĄ JSON āĻ āĻŦāĻā§āĻā§āĻ āĻāϰ āĻĢāĻŋāϞā§āĻĄāĻā§āϞā§āϰ āĻā§āϝāĻžāϞ⧠āĻāĻŋ āĻāĻžāĻāĻĒ āĻšāĻŦā§, āϤāĻž āĻ āĻŋāĻ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻāĻžāĻ, āϤāĻžāĻšāϞ⧠āĻāĻŽāϰāĻž Struct āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ –
type response2 struct {
Page int `json:"page-number"`
Fruits []string `json:"fruits-List"`
}
str := `
{
"number": 1,
"fruits-List": ["apple", "peach"]
}`
res := response2{}
json.Unmarshal([]byte(str), &res)
fmt.Println(res)
fmt.Println(res.Fruits[0])
āĻāĻāĻāĻĒā§āĻ –Â
{0 [apple peach]}
apple
āĻāĻ āĻĒāĻĻā§āĻŦāϤāĻŋāϰ āϏāĻŦāĻā§ā§ā§ āĻŦā§ āϏā§āĻŦāĻŋāϧāĻž āĻšāϞā§; type-safety āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻžāĻāĻĒ āĻāĻžāϏā§āĻāĻŋāĻ āύāĻž āĻāϰāĻžāĨ¤Â
json.valid():Â
āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āϏā§āϞāĻžāĻāϏ / map / āĻā§āϝāĻžāύā§āϞ āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻāĻŋāĨ¤
āĻļā§āϰā§āϤ⧠āĻā§āύ⧠āĻā§āϝāĻžāϞ⧠āĻĻāĻŋā§ā§ āĻāĻĻā§āϰāĻā§ āĻāύāĻŋāĻļāĻŋā§āĻžāϞāĻžāĻāĻ āĻāϰ⧠āύāĻŋāĻŦā§ (āύāϤā§āĻŦāĻž nil / zero āĻĻāĻŋā§ā§ āĻāύāĻŋāĻļāĻŋā§āĻžāϞāĻžāĻāĻ āĻšāĻŦā§)
āĻļā§āϰā§āϤ⧠āĻāĻĻā§āϰ āϏāĻžāĻāĻ, āĻā§āϝāĻžāĻĒāĻžāϏāĻŋāĻāĻŋ āĻāϤ āĻšāĻŦā§ āϤāĻž āĻāĻŽāϰāĻž āĻāĻžāύāϞā§āĻ, āĻĒāϰ⧠āϤāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšāϤ⧠āĻĒāĻžāϰ⧠(āĻ āϰā§āĻĨāĻžā§ āĻāĻĻā§āϰ āϏāĻžāĻāĻ, āĻā§āϝāĻžāĻĒāĻžāϏāĻŋāĻāĻŋ āĻĄāĻžāĻāύāĻžāĻŽāĻŋāĻā§āϝāĻžāϞāĻŋ āĻĒāϰāĻŋāϰā§āϤāύ āĻšāĻŦā§)
āĻāϰāĻāĻŽ āĻ āĻŦāϏā§āĻĨāĻžā§āĻāĻ āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ , āĻā§āύ []byte (āĻŦāĻžāĻāĻ āϏā§āϞāĻžāĻāϏ) āĻā§āϝāĻžāϞāĻŋāĻĄ JSON āĻĄāĻžāĻāĻž āĻāĻŋ-āύāĻžāĨ¤ unmarshal() āĻāϰāĻžāϰ āĻāĻā§ āĻāĻ āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻā§āĻ āĻāϰāϰ āĻā§āĻ āĻāϰāĻž āĻšā§.
āύāĻŋāĻā§āϰ āĻā§āĻĄāĻāĻŋ āĻā§ā§āĻžāϞ āĻāϰāĻŋ –Â
type response2 struct {
Page int `json:"page-number"`
Fruits []string `json:"fruits-List"`
}
str := `
{
"number": 1 "fruits-List": ["apple", "peach"]
}`
if json.Valid([]byte(str)) {
res := response2{}
json.Unmarshal([]byte(str), &res)
fmt.Println(res)
fmt.Println(res.Fruits[0])
} else{
fmt.Println("wrong JSON response")
}
āĻāĻāĻāĻĒā§āĻ – Â
wrong JSON response
4.json.NewEncoder():Â
āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠JSON encoding āĻāϰāĻž āϝāĻžā§ āĻāĻŦāĻ āĻāϰ āϏā§āĻŦāĻŋāϧāĻž āĻšāϞ⧠āĻāĻŽāϰāĻž āĻāĻāĻ āϏāĻžāĻĨā§ JSON āĻ encode, āĻāĻāĻāĻĒā§āĻ āϏā§āĻā§āϰāĻŋāĻŽ āĻāĻŦāĻ āϏā§āĻā§āϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻāĻŋ –Â
package main
import (
"encoding/json"
"os"
)
type Person struct {
Name string
Age int
}
func main() {
person := Person{Name: "John", Age: 30}
file, err := os.Create("person.json")
if err != nil {
panic(err)
}
defer file.Close()
encoder := json.NewEncoder(file)
err = encoder.Encode(person)
if err != nil {
panic(err)
}
}
āĻāĻāĻāĻĒā§āĻ person.json āĻĢāĻžāĻāϞ⧠āĻĒāĻžāĻā§āĻž āϝāĻžāĻŦā§Â –
{"Name":"John","Age":30}
āĻāϰ⧠āĻŦā§āĻļ āĻāĻŋāĻā§ āĻĢāĻžāĻāĻļāύ āϰā§ā§āĻā§āĻ āĻāϰ āĻŽāϧā§āϝ⧠json.NewDecoder() āĻšāϞ⧠json.NewEncoder() āĻāϰ āĻ āĻŋāĻ āĻāϞā§āĻā§, āϝā§āĻāĻž json.NewDecoder() āĻāύāĻĒā§āĻ āϏā§āĻā§āϰāĻŋāĻŽ āĻĨā§āĻā§ āϏāϰāĻžāϏāϰāĻŋ JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻāύāĻĒā§āĻ āύā§ā§āĨ¤Â
[ā§Ģ.⧍.⧍] Data Serialization
Data Serialization āĻšāϞ⧠āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āĻĄ āĻĄāĻžāĻāĻž āĻā§ āĻāĻŽāύ āĻāĻāĻāĻž āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž, āϝā§āĻāĻžāĻā§ āύā§āĻāĻā§āĻžāϰā§āĻā§ āĻā§āϰāĻžāύā§āϏāĻŽāĻŋāĻ āĻāϰāĻž āϝāĻžāĻŦā§ āĻ āĻĨāĻŦāĻž Disk āĻ āϏā§āĻāĻ āĻāϰ⧠āϰāĻžāĻāĻž āϝāĻžāĻŦā§, āϝāĻžāϤ⧠āĻĒāϰ⧠āĻāĻ āĻĄāĻžāĻāĻž āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤Â Â
Go āϤ⧠Data Serialization āĻāϰ āĻāύā§āϝ āϏāĻŦāĻā§ā§ā§ āĻŦā§āĻļāĻŋ āĻŦā§āϝāĻŦāĻšā§āϤ āĻā§āĻāύāĻŋāĻ āĻšāϞ⧠JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āύā§ā§āĻž, āϝā§āĻāĻž āĻāĻŽāϰāĻž āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻļāĻŋāĻā§āĻāĻŋāĨ¤Â
āĻāĻāĻžāύā§Â āĻā§ā§āĻžāϞ āĻāϰāϤ⧠āĻšāĻŦā§ āϝā§, āĻĒā§āϰāĻžā§āĻļāĻ JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§āϰ key āĻāĻŦāĻ Struct āĻāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĢāĻŋāϞā§āĻĄ āĻā§āϞ⧠āĻāĻāĻ āύāĻžāĻŽā§āϰ āĻšā§ āύāĻž, āϤāĻžāĻ Struct āĻāϰ āĻĢāĻŋāϞā§āĻĄā§āϰ āϏāĻžāĻĨā§ āĻāĻžāϏā§āĻāĻŽāĻžāĻāĻāĻĄ âjsonâ āĻā§āϝāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤ āύāĻŋāĻā§āϰ āĻā§āĻĄāĻāĻŋ āĻā§ā§āĻžāϞ āĻāϰāĻŋ –
type response2 struct {
Page int `json:"pageNumber"`
Fruits []string `json:"fruits-List"`
}
jsonStr := `
{
"page-number": 1,
"fruits-List": ["apple", "peach"]
}`
res := response2{}
json.Unmarshal([]byte(jsonStr), &res)
fmt.Println(res)
āĻāĻāĻāĻĒā§āĻ –Â
{0 [apple peach]}
āĻāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻŽāϰāĻž āϝ⧠āĻā§āϏāύ āĻĄāĻžāĻāĻž “jsonStr” āϰāĻŋāϏāĻŋāĻ āĻāϰā§, āĻāύāĻā§āĻĄ āĻāϰāϤ⧠āĻāĻžāĻā§āĻāĻŋ, āϤāĻžāϰ āĻāĻāĻāĻžÂ key (âpage-numberâ), response2 Struct āĻāϰ Page āĻĢāĻŋāϞā§āĻĄā§āĻ°Â āĻā§āϏāύ āĻā§āϝāĻžāĻ (pageNumber) āĻāĻ°Â āϏāĻžāĻĨā§ āĻŽāĻŋāϞ⧠āύāĻŋāĨ¤ āĻāϰ āĻĢāϞ⧠āĻāĻŽāϰāĻž āϝāĻāĻ¨Â jsonStr āĻā§ āĻāύāĻā§āĻĄ āĻāϰ⧠response2 Struct āĻ āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻāϤ⧠āĻāĻžāĻā§āĻāĻŋ, āĻāĻ āĻĢāĻŋāϞā§āĻĄā§āϰ āĻā§āϝāĻžāϞ⧠null āĻšā§ā§ āϝāĻžāĻā§āĻā§ (āĻā§āύ error āĻĒāĻžāĻāύāĻŋ āĻāĻŋāύā§āϤā§!!) āĨ¤ āϤāĻžāĻ, Struct āĻāϰ “json” āĻā§āϝāĻžāĻ āĻĻā§ā§āĻžāϰ āϏāĻŽā§ āĻāĻŽāĻžāĻĻā§āϰ āĻŦāĻžā§āϤāĻŋ āϏāϤāϰā§āĻāϤāĻž āĻ āĻŦāϞāĻŽā§āĻŦāύ āĻāϰāĻž āϞāĻžāĻāĻŦā§, āϝā§āύ JSON āĻāϰ key āĻāĻŦāĻ Struct āĻāϰ āĻāĻāĻ āĻĢāĻŋāϞā§āĻĄā§āϰ âjsonâ āĻā§āϝāĻžāĻ āĻāĻāĻ āĻšā§āĨ¤
[ā§Ģ.⧍.ā§Š] āĻāĻžāĻāĻĒ āĻāύāĻāĻžāϰā§āĻļāύ
āĻāĻ āĻāĻžāĻāĻĒā§āϰ āĻĄāĻžāĻāĻž āĻā§ āĻ āύā§āϝ āĻāĻžāĻāĻĒā§āϰ āĻĄāĻžāĻāĻž āϤ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāĻā§ āĻŦāϞ⧠āĻāĻžāĻāĻĒ āĻāύāĻāĻžāϰā§āĻļāύ. Go āϤ⧠āĻāĻ āĻāĻžāĻāĻĒā§āϰ āĻĄāĻžāĻāĻž āĻā§ āĻ āύā§āϝ āĻāĻžāĻāĻĒā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āĻā§āĻŦāĻ āϏāĻšāĻ –
var iNum int = 10
var fNum float64 = float64(iNum)
fmt.Printf("value = %v | type - %T\n", fNum, fNum)
var fNum2 = 5.65
iNum2 := int(fNum2)
fmt.Printf("value = %v | type - %T\n", iNum2, iNum2)
āĻāĻāĻāĻĒā§āĻ –
value = 10 | type - float64
value = 5 | type - int
āĻāĻ āĻā§āĻĄ āĻĻā§āĻā§ āĻā§āĻŦ āϏāĻšāĻā§āĻ āĻŦā§āĻāĻž āϝāĻžāĻā§āĻā§ āϝā§, āĻāĻŽāϰāĻž āϝāĻĻāĻŋ V āĻāĻžāĻāĻĒā§āϰ āĻĄāĻžāĻāĻž āĻā§ T āĻāĻžāĻāĻĒā§āϰ āĻĄāĻžāĻāĻžāϤ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻāĻžāĻ, āϤāĻžāĻšāϞ⧠āĻāĻŽāϰāĻž T(V) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤Â
āϤāĻŦā§ āĻ āĻŦāĻļā§āϝāĻ āĻāĻŋāĻā§ āύāĻŋā§āĻŽ āĻŽā§āύ⧠āĻāϰāĻž āϞāĻžāĻāĻŦā§, string āĻāĻžāĻāĻĒā§āϰ āĻĄāĻžāĻāĻž āĻā§ āϤ⧠āĻāϰ āĻāύā§āĻāĻŋāĻāĻžāϰ / āĻĢā§āϞā§āĻ āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻāĻžāĻā§āĻž āĻāĻāĻŋāϤ āύāĻžāĨ¤
var str string = "string value"
iNum2 := int(str)
āĻāĻ āĻ āĻĻā§āĻā§āϤ āĻāĻžāĻā§āĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻšāĻžāϤā§-āύāĻžāϤ⧠–
# command-line-arguments
./type_conv.go:8:15: cannot convert str (variable of type string) to type int
āĻāĻžāĻŖāĻŋāϤāĻŋāĻ āĻšāĻŋāϏāĻžāĻŦ āύāĻŋāĻāĻžāĻļ āĻāϰāĻžāϰ āϏāĻŽā§ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻ āĻāĻžāĻāĻĒ āĻāύāĻāĻžāϰā§āĻļāύ āĻā§āϞ⧠āĻā§ā§āĻžāϞ āϰā§āĻā§ āĻāϰāĻž āϞāĻžāĻāĻŦā§āĨ¤Â
āϧāϰāĻŋ, āĻāĻŽāϰāĻž āĻāĻžāĻā§āĻāĻŋ ⧍ āĻāĻŋ āϏāĻāĻā§āϝāĻž āϝā§āĻ āĻāϰāĻŦā§, āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ interger, āĻāϰā§āĻāĻāĻŋ āĻĢā§āϞā§āĻ. āϤāĻāύ āĻ āĻŦāĻļā§āϝāĻ āĻāĻĻā§āϰāĻā§ āĻāĻāĻ āĻāĻžāĻāĻĒā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āϝā§āĻ āĻāϰāĻž āϞāĻžāĻāĻŦā§, āύāĻžāĻšāϞ⧠error āĻāϏāĻŦā§
var num1 float64 = 10.5
var num2 int = 5
result := num1 + num2
fmt.Println("result = ", result)
āĻāĻāĻāĻĒā§āĻ –Â
# command-line-arguments
./type_conv.go:20:12: invalid operation: num1 + num2 (mismatched types float64 and int)
āϏā§āĻĒāώā§āĻāϤāĻ, āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§,āĻāĻŽāĻžāĻĻā§āϰ āϝā§āĻ āĻ āĻĒāĻžāϰā§āĻļāύā§Â āĻā§āϞ āĻšā§ā§āĻā§āĨ¤Â
āϏāĻ āĻŋāĻ āĻāĻžāĻŦā§ āĻāϰāϞ⧠āĻšāĻŦā§ āύāĻŋāĻā§āϰ āĻŽāϤ⧠–
var num1 float64 = 10.5
var num2 int = 5
result := float64(num1) + float64(num2)
fmt.Println("result = ", result)
āĻāĻāĻžāύ⧠⧍ āĻāĻž āύāĻžāĻŽā§āĻŦāĻžāϰāĻā§āĻ āĻĢā§āϞā§āĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āύā§ā§āĻž āĻšā§ā§āĻā§, āĻāĻžāĻāϞ⧠āĻāĻŽāϰāĻž āĻāύā§āĻāĻŋāĻāĻžāϰā§āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āύāĻŋāϤ⧠āĻĒāĻžāϰāϤāĻžāĻŽāĨ¤
āĻāĻŽāϰāĻž āĻāĻžāĻāϞ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āĻŦā§āϏā§āϰ āύāĻžāĻŽā§āĻŦāĻžāϰ āĻā§ āĻ āύā§āϝ āĻā§āύ āĻŦā§āĻāϏ⧠āĻāĻāĻāĻĒā§āĻ āϏā§āĻā§āϰāĻŋāĻŽā§ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰāĻŋāĻ
var d1 int = 10
fmt.Printf("in binary=%b\n", d1)
fmt.Printf("in octal=%o\n", d1)
fmt.Printf("in hexadecimal=%X\n", d1)
āĻāĻāĻāĻĒā§āĻ –Â
in binary=1010
in octal=12
in Hexadecimal=A