Als Anfänger in Gehen Sie zu verstehen, ich habe Probleme io.Writer
zu verstehen.io.Writer in Go - Anfänger versuchen, sie
Mein Ziel: eine Struktur nehmen und es in eine JSON-Datei schreiben.
Ansatz:
- encoding/json.Marshal
verwenden, um meine Struktur in
Bytes zu konvertieren - füttern diese Bytes zu einem os.File
Writer
Dies ist, wie ich es bekam Arbeit:
package main
import (
"os"
"encoding/json"
)
type Person struct {
Name string
Age uint
Occupation []string
}
func MakeBytes(p Person) []byte {
b, _ := json.Marshal(p)
return b
}
func main() {
gandalf := Person{
"Gandalf",
56,
[]string{"sourcerer", "foo fighter"},
}
myFile, err := os.Create("output1.json")
if err != nil {
panic(err)
}
myBytes := MakeBytes(gandalf)
myFile.Write(myBytes)
}
Nach this article Lesen, ich änderte mein Programm so aus:
package main
import (
"io"
"os"
"encoding/json"
)
type Person struct {
Name string
Age uint
Occupation []string
}
// Correct name for this function would be simply Write
// but I use WriteToFile for my understanding
func (p *Person) WriteToFile(w io.Writer) {
b, _ := json.Marshal(*p)
w.Write(b)
}
func main() {
gandalf := Person{
"Gandalf",
56,
[]string{"sourcerer", "foo fighter"},
}
myFile, err := os.Create("output2.json")
if err != nil {
panic(err)
}
gandalf.WriteToFile(myFile)
}
Meiner Meinung nach ist das erste Beispiel ist ein einfacher und leichter für einen Anfänger zu verstehen ... aber ich habe das Gefühl, dass das zweite Beispiel die Go idiomatische Weg der Erreichung des Ziels ist.
Fragen:
1. ist über Annahme korrekt (diese zweite Option ist Go idiomatic)?
2. Gibt es einen Unterschied in den oben genannten Optionen? Welche Option ist besser?
3. andere Möglichkeiten, dasselbe Ziel zu erreichen?
Danke,
WM