Tags: #go #serialization
package main
import (
"bufio"
"fmt"
"os"
toml "github.com/pelletier/go-toml"
)
func main() {
err := Write("fastly.toml")
if err != nil {
fmt.Printf("%+v\n", err)
}
}
type Manifest struct {
Foo string
Bar int
}
func Write(filename string) error {
m := Manifest{"foo", 123}
fp, err := os.Create(filename)
if err != nil {
return err
}
if err := toml.NewEncoder(fp).Encode(&m); err != nil {
return err
}
contents := make([]string, 0)
if _, err := fp.Seek(0, 0); err == nil {
scanner := bufio.NewScanner(fp)
for scanner.Scan() {
contents = append(contents, scanner.Text())
}
if _, err := fp.Seek(0, 0); err == nil {
writer := bufio.NewWriter(fp)
writer.WriteString("# my link here\n")
for _, line := range contents {
_, err := writer.WriteString(line + "\n")
if err != nil {
return err
}
}
if err := writer.Flush(); err != nil {
return err
}
}
}
if err := fp.Sync(); err != nil {
return err
}
if err := fp.Close(); err != nil {
return err
}
return nil
}