[ā§Ģ.ā§Š] āĻĢāĻžāĻāϞ āĻ āĻĒāĻžāϰā§āĻļāύ (File operations)
Go āĻāϰ io/ioutil āĻĒā§āϝāĻžāĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āϞā§āĻāĻžāϞ āϏāĻŋāϏā§āĻā§āĻŽ āĻ āĻĢāĻžāĻāϞ read-write āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋ, āĻāϰ āϏāĻžāĻĨā§ os āĻĒā§āϝāĻžāĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āύāĻŋāĻāϏā§āĻŦ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻŦāĻŋāώ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āϝā§āĻŽāύ, file opening, closing, reading,creating, writing, remove
[ā§Ģ.ā§Š.ā§§] āĻĢāĻžāĻāϞ open
os.Open(“..file_name”) āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āϞā§āĻāĻžāϞ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĢāĻžāĻāϞ āĻāĻĒā§āύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻŦā§āϰā§āϝāĻžāĻā§āĻā§āϰ āĻāĻŋāϤāϰ⧠file_name āĻāϰ āĻāĻžā§āĻāĻžā§ āĻāĻŽāϰāĻž āϝ⧠āĻĢāĻžāĻāϞāĻāĻž āĻāĻĒā§āύ āĻāϰāϤ⧠āĻāĻžāĻā§āĻāĻŋ, āϤāĻžāϰ path āĻĻāĻŋāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāύāĻāĻž āĻāĻāĻāĻž os.File āĻāϰ āĻāĻāĻāĻŋ āĻĒā§ā§āύā§āĻāĻžāϰ (*os.File, āϝā§āĻāĻž file handle āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāĻ āĻāϰāĻŦā§) āĻāĻŦāĻ āĻāĻāĻāĻž āĻāϰāϰ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤Â
āĻĢāĻžāĻāϞ āĻāĻĒā§āύ āĻāϰāĻžāϰ āĻĒāϰā§, āĻŦāĻžāĻāĻŋ āϏāĻŦ āĻāĻžāĻ āĻļā§āώ⧠āĻĢāĻžāĻāϞāĻāĻž close āĻāϰāĻž āĻāĻžāϞ⧠āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ ( āĻāĻāĻžāϰ āĻāύā§āϝ defer āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§), āύāĻŋāĻā§āϰ āĻā§āĻĄāĻāĻž āĻā§ā§āĻžāϞ āĻāϰāĻŋ –
f, err := os.Open("../5-type-converison/read-file.txt")
defer f.Close()
if err != nil {
fmt.Println(err)
return
}
āĻāĻ āĻā§āĻĄā§āϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ āĻĢāĻžāĻāϞ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻāĻŋāϞā§āĻ

āĻāĻŽāϰāĻžÂ “6-file/file-op.go” path āĻ āĻĨā§āĻā§ “5-type-converison” āĻĢā§āϞā§āĻĄāĻžāϰā§āϰ read-file.txt āĻāĻĒā§āύ āĻāϰāĻāĻŋāĨ¤ āϤāĻžāĻ os.Open() āĻāϰ āĻāĻŋāϤāϰ⧠āϏā§āĻ āĻ āύā§āϝāĻžā§ā§ āĻĢāĻžāĻāϞā§āϰ path āĻĻā§ā§āĻž āĻšā§ā§āĻā§āĨ¤ āϝāĻĻāĻŋ āĻ āĻŋāĻāĻ āĻžāĻ āĻŽāϤ⧠āĻĢāĻžāĻāϞ āĻāĻĒā§āύ āύāĻž āĻšā§, āϤāĻžāĻšāϞ⧠āĻāϰāϰ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰāϤā§āĨ¤
[ā§Ģ.ā§Š.⧍] āĻĢāĻžāĻāϞ Read
āĻā§āύ āĻĢāĻžāĻāϞāĻā§ read āĻāϰāĻžāϰ āĻĒāϰ⧠āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻĒāĻžāĻāĨ¤ āĻāĻ āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄā§āϞā§āϰ āϏāĻžāĻĨā§ os āĻĒā§āϝāĻžāĻā§āĻā§āϰ Read() āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ read āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āϤāĻŦā§ āĻāĻ āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻāĻāĻāĻž byte āĻāĻžāĻāĻĒā§āϰ āĻ ā§āϝāĻžāϰ⧠āϤā§, āĻĢāĻžāĻāϞ āĻĨā§āĻā§ read āĻāϰāĻž āĻŦāĻžāĻāĻāĻā§āϞ⧠āϏā§āĻā§āϰ āĻāϰā§āĨ¤Â
āĻāĻāϏāĻžāĻĨā§ āĻāϤāĻā§āĻā§ read āĻāϰ⧠āĻāĻŦāĻ āϏā§āĻā§āϰ āĻāϰā§?
byte āĻāĻžāĻāĻĒā§āϰ āϝ⧠āĻ ā§āϝāĻžāϰ⧠āϤ⧠āϏā§āĻā§āϰ āĻāϰāĻāĻŋ, āϤāĻžāϰ āĻĻā§āϰā§āĻā§āϝā§āϰ āϏāĻŽāĻžāύ (āϝāĻĻāĻŋ āĻĢāĻžāĻāϞ āĻāϰ āĻĻā§āϰā§āĻā§āϝ byte āĻ ā§āϝāĻžāϰā§āϰ āĻā§ā§ā§ āĻāĻŽ āĻĨāĻžāĻā§ āϤāĻžāĻšāϞ⧠āϏāĻŦāĻ read āĻāϰāĻŦā§)āĨ¤Â āϰāĻŋāĻāĻžāϰā§āύ āĻāϰ⧠āĻāϤāĻā§āϞāĻž byte read āĻāϰāĻž āĻšā§ā§āĻā§ āϏā§āĻ āϏāĻāĻā§āϝāĻž āĻāĻŦāĻ āĻāϰāϰ (āĻāĻ āĻāϰāϰ āĻā§āĻ āĻāϰ⧠āϝāĻĻāĻŋ āĻĻā§āĻāĻž āϝāĻžā§ āϝ⧠āϤāĻž nil, āϤāĻžāĻšāϞā§āĻ āĻāĻāĻŽāĻžāϤā§āϰ āϏāĻžāĻŽāύ⧠āĻāĻāĻžāĻŦā§) –Â
f, err := os.Open("read-file.txt")
defer f.Close()
if err != nil {
fmt.Println(err)
return
}
data := make([]byte, 100)
n, err := f.Read(data)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, string(data[:n]))
āĻāĻāĻāĻĒā§āĻ –Â
Read 12 bytes: Hello Golang
āĻāĻĒāϰā§āϰ āĻā§āĻĄāĻāĻž āϝāĻĻāĻŋ āĻā§ā§āĻžāϞ āĻāϰāĻŋ, āϤāĻžāĻšāϞ⧠āĻĻā§āĻāĻž āϝāĻžāĻŦā§, os.Open(“read-file.txt”), read-file.txt āĻĢāĻžāĻāϞ āĻāĻž read āĻāϰ⧠āĻāĻŦāĻ f āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāĻŦāĻ err, āĻāϰāϰ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤ āĻāĻ f āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄāϞ Read() āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, 100 āĻĻā§āϰā§āĻā§āϝā§āϰ byte āĻāĻžāĻāĻĒ āĻ ā§āϝāĻžāϰā§āϤā§, āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻĢāĻžāĻāϞ āĻĨā§āĻā§ āϏāϰā§āĻŦā§āĻā§āĻ 100 byte āĻĄāĻžāĻāĻž read āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
io/ioutil āĻāϰ ReadFile() āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϰ⧠āϏāĻšāĻā§ āĻĢāĻžāĻāϞ read āĻāϰāĻž āϝāĻžā§āĨ¤ āĻā§āύāύāĻž āĻāĻā§āώā§āϤā§āϰ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāϞāĻžāĻĻāĻž āĻāĻžāĻŦā§ āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āϞāĻžāĻā§ āύāĻž, āĻāĻŦāĻžāϰ āĻāĻŽāĻžāĻĻā§āϰ āĻāϞāĻžāĻĻāĻž āĻāĻžāĻŦā§ byte āĻ ā§āϝāĻžāϰ⧠āĻĄāĻŋāĻā§āϞā§ā§āĻžāϰ āĻāϰ⧠āϤāĻžāϤ⧠āϏā§āĻā§āϰ āĻāϰāĻž āϞāĻžāĻā§ āύāĻž –Â
ioutilData, err := ioutil.ReadFile("read-file.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Read %d bytes: %s\n",len(ioutilData), string(ioutilData))
āĻāĻāĻāĻĒā§āĻ –Â
Read 12 bytes: Hello Golang
āĻāĻ āĻā§āĻĄ āϝāĻĻāĻŋ āĻā§ā§āĻžāϞ āĻāϰāĻŋ, ioutil.ReadFile(“read-file.txt“) āĻāĻŋ read-file.txt āĻĢāĻžāĻāϞ read āĻāϰ⧠āĻāĻŦāĻ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰāĻā§ ioutilData (byte āĻāĻžāĻāĻĒā§āϰ āĻ ā§āϝāĻžāϰā§) āĻāĻŦāĻ err (āĻāϰāϰ). āĻāĻ ioutilData āĻā§ string āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰ⧠āĻāĻŽāϰāĻž āĻĢāĻžāĻāϞā§āϰ āĻāύā§āĻā§āύā§āĻ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
[ā§Ģ.ā§Š.ā§Š] āĻĢāĻžāĻāϞ Create
os.Create(..file_name) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāϤā§āύ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāĻž āĻšā§ (āϝāĻĻāĻŋ āĻĢāĻžāĻāϞ āĻāĻž āĻāĻā§ āĻĨā§āĻā§āĻ āĻĨā§āĻā§ āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻĢāĻžāĻāϞā§āϰ āĻāĻā§āϰ āϏāĻŦāĻāĻŋāĻā§ āĻŽā§āĻā§ āϝāĻžā§)āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāύ āĻāĻž āĻĢāĻžāĻāϞā§āϰ path āĻāύāĻĒā§āĻ āĻšāĻŋāϏā§āĻŦā§ āύāĻŋā§ā§, āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāĻŦāĻ āĻāϰāϰ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§(āϝāĻĻāĻŋ āĻāϰāϰ nil āύāĻž āĻšā§, āϤāĻžāĻšāϞ⧠āĻĢāĻžāĻāϞ āĻšā§āϝāĻžāύā§āĻĄā§āϞāĻā§ āĻāϰ āĻāύāĻĒā§āĻ/āĻāĻāĻāĻĒā§āĻā§āϰ āĻāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻž –
f, err := os.Create("read-file.txt")
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
āĻāĻ āĻā§āĻĄā§āϰ āϏāĻžāĻšāĻžāϝā§āϝā§, āĻāĻāĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠“read-file.txt” āĻĢāĻžāĻāϞ⧠create āĻšāĻŦā§, āϝāĻĻāĻŋ āĻā§āύ āĻāϰāϰ āύāĻž āĻĨāĻžāĻā§āĨ¤
[ā§Ģ.ā§Š.ā§Ē] āĻĢāĻžāĻāϞ Writing
āĻāĻāĻžāύ⧠āĻāĻāĻāĻž āύāϤā§āύ āĻĢāĻžāĻāϞ create āĻāϰāĻžāϰ āĻĒāϰ⧠write āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻāĻā§ āĻĨā§āĻā§ āĻāĻāĻāĻž byte āĻāĻžāĻāĻĒā§āϰ āĻ ā§āϝāĻžāϰ⧠āϤā§āϰāĻŋ āĻāϰāĻž āĻšāĻŦā§āĨ¤ āϏā§āĻāĻžāύ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻĢāĻžāĻāϞ⧠āĻāĻŋ write āĻāϰāϤ⧠āĻāĻžāĻ, āϤāĻž āϏā§āĻā§āϰ āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻĢāĻžāĻāϞ create āĻāϰāĻžāϰ āϏāĻŽā§ āĻāĻŽāϰāĻž āϝ⧠āĻšā§āϝāĻžāύā§āĻĄā§āϞāĻāĻž āĻĒāĻžāĻŦā§, āϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻ write āĻĢāĻžāĻāĻļāύ āĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāύ āĻāĻž āϰāĻŋāĻāĻžāϰā§āύ āĻāϰ⧠āĻāϤ āĻŦāĻžāĻāĻ write āĻāϰāĻž āĻšāĻā§āĻā§ āϤāĻžāϰ āϏāĻāĻā§āϝāĻž āĻāĻŦāĻ āĻāϰāϰāĨ¤ āĻāĻ āĻāϰāϰā§āϰ āϏāĻžāĻšāĻžāϝā§āϝā§, āĻāĻŽāĻžāĻĻā§āϰ āĻĢāĻžāĻāϞ write āĻ āĻā§āύ⧠āϏāĻŽāϏā§āϝāĻž āĻšāϞ⧠āĻāĻŋāύāĻž āϤāĻž āϝāĻžāĻāĻžāĻ āĻāϰāĻž āĻšā§āĨ¤
āϤāĻŦā§ āϝāĻĻāĻŋ āĻā§āύ āĻāĻžāϰāĻŖā§ āύāϤā§āύ create āĻāϰāĻž file āĻ write āĻšāĻā§āĻž byte āϏāĻāĻā§āϝāĻž āĻāĻŦāĻ āĻāĻŽāϰāĻž āϝāĻž write āĻāϰāϤ⧠āĻāĻžāĻā§āĻāĻŋ āϤāĻžāϰ āĻĻā§āϰā§āĻā§āϝ āϝāĻĻāĻŋ āϏāĻŽāĻžāύ āύāĻž āĻšā§, āϤāĻžāĻšāϞ⧠āĻā§āύ āĻāϰāϰ āĻšāĻŦā§ āύāĻž, āĻāĻŋāύā§āϤ⧠āĻāĻāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻā§āĻ āĻāϰ⧠āύāĻŋāϤ⧠āĻšāĻŦā§āĨ¤Â
f, err := os.Create("read-file.txt")
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
data := []byte("Hello Golang")
n, err := f.Write(data)
if len(data) != n {
fmt.Printf("line num not matched %v, %v\n", n, len(data))
return
}
if err != nil {
fmt.Println(err)
return
}
ioutil āĻĻāĻŋā§ā§āĻ āĻĢāĻžāĻāϞ write āĻāϰāĻž āϝāĻžā§āĨ¤ āĻāĻ āĻā§āώā§āϤā§āϰ⧠ioutil āĻāϰ WriteFile() āĻĢāĻžāĻāĻļāύ āĻāϰ –Â
- ā§§āĻŽ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻ āϝ⧠āĻĢāĻžāĻāϞāĻāĻž write āĻāϰāϤ⧠āĻāĻžāĻ, āϤāĻžāϰ file path
- ⧍⧠āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻ byte āĻāĻžāĻāĻĒā§āϰ āĻ ā§āϝāĻžāϰā§āϰ āύāĻžāĻŽ (āĻĢāĻžāĻāϞ⧠āϝāĻž āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻāĻž āĻšāĻŦā§, āϏā§āĻ āĻāύā§āĻā§āύā§āĻ āĻāĻ āĻ ā§āϝāĻžāϰā§āϤ⧠āĻāĻā§ āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻāĻž āĻšā§)
- ā§Šā§ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻ āĻĢāĻžāĻāϞ permission mode āϏā§āĻ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻšā§āĨ¤ āĻāϰ āĻĻā§āĻŦāĻžāϰāĻžāĻ āĻĢāĻžāĻāϞ⧠read/write āĻāϰāĻžāϰ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āϏā§āĻ āĻšā§āĨ¤
data := []byte("Hello, world!")
err = ioutil.WriteFile("read-file.txt", data, 0644)
if err != nil {
fmt.Println(err)
return
}
[ā§Ģ.ā§Š.ā§Ģ] āĻĢāĻžāĻāϞ āϰāĻŋāĻŽā§āĻ āĻāϰāĻž
os.Remove(“file_name”) āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻž path āĻāϰ āĻĢāĻžāĻāϞāĻāĻŋ āĻĄāĻŋāϞāĻŋāĻ āĻšā§ā§ āϝāĻžāĻŦā§āĨ¤ āĻāĻ āĻĢāĻžāĻāĻļāύāĻāĻŋāϰ āĻāύāĻĒā§āĻ āĻšāĻŋāϏā§āĻŦā§, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻž āĻĢāĻžāĻāϞ path āύā§ā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāϰāϰ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤ āϝāĻĻāĻŋ āĻāϰāϰ nil āύāĻž āĻšā§, āϤāĻžāĻšāϞ⧠āĻĢāĻžāĻāϞ āĻĄāĻŋāϞāĻŋāĻ āĻšāĻŦā§ āύāĻžāĨ¤
err := os.Remove("created.txt")
if err != nil {
fmt.Println(err)
return
}
āϝāĻĻāĻŋ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ 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