البيانات
-
ip: 192.168.1.1
role: master
-
ip: 192.168.1.2
role: node
-
ip: 192.168.1.3
role: node
الهيكل هو
type NODE struct {
node []struct {
ipaddr string
role string
} `yaml:",flow"`
}
كود الاعراب هو
n := NODE{}
err := yaml.Unmarshal([]byte(data), &n)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("--- t:\n%v\n\n", n)
ثم فشلت مع بقية المقال:
2016/12/14 17:13:39 error: yaml: unmarshal errors:
line 2: cannot unmarshal !!seq into main.NODE
vanloswang أحصل على نفس الخطأ. كيف حل هذا؟
@ alexforever86 هل وجدت حلاً يومًا ما؟
بعد المعاناة مع هذا لبضع ساعات ، اكتشفت ذلك بعد 5 دقائق من اختبار اتصال هذا الموضوع (نعتذر عن ذلك!) كان التعليق في https://github.com/go-yaml/yaml/issues/101#issuecomment -178792007 مساعدة ضخمة.
في حالتي ، كنت أحاول تحليل ملف Ansible requirements.yaml
والذي يبدو كالتالي:
---
- src: franklinkim.php5-newrelic
- src: geerlingguy.composer
- src: geerlingguy.java
- src: geerlingguy.nginx
- src: geerlingguy.nodejs
- src: geerlingguy.php
- src: geerlingguy.php-versions
- src: geerlingguy.rabbitmq
- src: geerlingguy.solr
- src: newrelic.newrelic-infra
- name: mycustomrole
src: [email protected]:foo/bar.git
scm: git
version: master
- src: https://github.com/nickhammond/ansible-logrotate
name: nickhammond.logrotate
كان لدي هيكل كهذا ، والذي كان صحيحًا:
type AnsibleSource struct {
Source string `yaml:"src"`
Name *string `yaml:"name,omitempty"`
Type *string `yaml:"scm,omitempty"`
Version *string `yaml:"version,omitempty"`
}
ولكن لإلغاء تنظيم تسلسل المستوى الأعلى بشكل صحيح (وحل الخطأ cannot unmarshal !!seq
) كان عليّ إلغاء تنظيمه عبر var out []AnsibleSource
كما يلي:
source, err := ioutil.ReadFile(ansibleRequirements.Path)
if err != nil {
return
}
var out []AnsibleSource
err = yaml.Unmarshal(source, &out)
if err != nil {
return
}
fmt.Println(requirements)
آمل أن يساعد هذا شخص آخر!
التعليق الأكثر فائدة
بعد المعاناة مع هذا لبضع ساعات ، اكتشفت ذلك بعد 5 دقائق من اختبار اتصال هذا الموضوع (نعتذر عن ذلك!) كان التعليق في https://github.com/go-yaml/yaml/issues/101#issuecomment -178792007 مساعدة ضخمة.
في حالتي ، كنت أحاول تحليل ملف Ansible
requirements.yaml
والذي يبدو كالتالي:كان لدي هيكل كهذا ، والذي كان صحيحًا:
ولكن لإلغاء تنظيم تسلسل المستوى الأعلى بشكل صحيح (وحل الخطأ
cannot unmarshal !!seq
) كان عليّ إلغاء تنظيمه عبرvar out []AnsibleSource
كما يلي:آمل أن يساعد هذا شخص آخر!