類似記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
YAMLでは ---
を使って、1ファイル内に複数のドキュメントを含めることが出来ます。
この場合、どのようにデコードするのか?って聞かれたので、ついでにここにもメモしておきます。
複数ドキュメントの場合は、その数分 Decode を呼び出すだけです。
試してみる
以下のようなYAMLがあるとします。
# Data 1 --- - hello - world # Data 2 --- - HELLO - WORLD # Data 3 --- - WORLD - HELLO
1ファイル内に3ドキュメントある状態ですね。
んで、それをデコードするのが以下。
package threedash import ( "bytes" "io" "os" "github.com/devlights/gomy/output" "gopkg.in/yaml.v3" ) // ThreeDash は、YAML の "---" で複数のドキュメントが存在する場合のサンプルです. // // # REFERENCES // - https://yaml.org/spec/1.2.2/ func ThreeDash() error { // Read file var ( file *os.File buf bytes.Buffer err error ) file, err = os.Open("./examples/basic/yamlop/three-dash/data.yaml") if err != nil { return err } defer file.Close() _, err = io.Copy(&buf, file) if err != nil { return err } // Decode yaml var ( data []string decoder = yaml.NewDecoder(&buf) ) for { err = decoder.Decode(&data) if err != nil { if err == io.EOF { break } return err } output.Stdoutl("[data]", data) } return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ task task: [run] go run . -onetime ENTER EXAMPLE NAME: yaml_threedash [Name] "yaml_threedash" [data] [hello world] [data] [HELLO WORLD] [data] [WORLD HELLO] [Elapsed] 150.05µs
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。