Не удается прочитать и распечатать данные файла yaml

# #go

Вопрос:

Язык: Go

Я практикуюсь в том, как читать и печатать данные файла yaml, но не могу этого сделать, и код проходит. Кто-нибудь может здесь помочь?

Файл Yaml:

 ENV:
 foo: test
 boo: test-123-tet222
 

код:

 package test

import (
    "testing"
    "fmt"
    "io/ioutil"
    "log"
    "gopkg.in/yaml.v3"
)

type config struct {
    foo string 
    boo string 
}


func TestTerraformAzureCosmosDBExample(t *testing.T) {
 yFile, err := ioutil.ReadFile("config.yaml")
 if err != nil {
     log.Fatal(err)
 }

 data := make(map[string]config)

 err2 := yaml.Unmarshal(yFile, amp;data)
 if err2 != nil {
      log.Fatal(err2)
 }
 for k, v := range data {
      fmt.Printf(k, v)
 }
}
 

Ожидаемые результаты:

  foo: test
 boo: test-123-tet222
 

Фактический Объем Производства:

 C:fooboo>go test -v
=== RUN   TestTerraformAzureCosmosDBExample
ENV%!(EXTRA test.config={ })--- PASS: TestTerraformAzureCosmosDBExample (0.00s)
PASS
ok      foobo_test   0.179s
 

Ответ №1:

В вашей config структуре отсутствуют теги yaml. Отредактируйте его следующим образом. Также Printf метод ожидает строку форматирования, отредактируйте ее также следующим образом.

 import (
    "fmt"
    "gopkg.in/yaml.v3"
    "io/ioutil"
    "log"
    "testing"
)

type config struct {
    Foo string `yaml:"foo"`
    Boo string `yaml:"boo"`
}


func TestTerraformAzureCosmosDBExample(t *testing.T) {
    yFile, err := ioutil.ReadFile("config.yaml")
    if err != nil {
        log.Fatal(err)
    }

    data := make(map[string]config)

    err = yaml.Unmarshal(yFile, amp;data)
    if err != nil {
        log.Fatal(err)
    }
    for k, v := range data {
        fmt.Printf(`key: %v, value: %v`, k,v)
    }
}
 

дает результат:

 key: ENV, value: {test test-123-tet222}--- PASS: TestTerraformAzureCosmosDBExample (0.00s)
 

Ответ №2:

Вы повторяете data то, что есть map[string]config .

У этого объекта есть один ключ, ENV и значение этого ключа-это config объект, который вы ищете.

Попробуйте с:

 fmt.Printf("Foo: %Sn", data["ENV"].Foo)
fmt.Printf("Boo: %Sn", data["ENV"].Boo)
 

Комментарии:

1. Появляется следующая ошибка «не удается изменить диапазон данных[«ENV»] (тип конфигурации)»

2. да, правильно, так как это больше не карта. Изменил ответ