# #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. да, правильно, так как это больше не карта. Изменил ответ