我正在尝试制作一个非常简单的ssh地址簿程序。获取有关ssh地址的一些信息并将它们存储在yaml文档中。我正在做的部分是为了了解Go并且遇到一个小问题。我可以序列化数据并将文档放入文件中,但当我尝试将其读回时,我收到此错误:
<ImageView
android:layout_width="150dp"
android:layout_height="60dp"
android:background="@drawable/frappesbutton2"
android:id="@+id/imageView"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/buttonc2"
android:layout_toStartOf="@+id/buttonc2" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/frapeonemarco2"
android:layout_marginTop="21dp"
android:id="@+id/imageView2"
android:layout_below="@+id/imageView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
/>
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonc1"
android:onClick="checkf1"
android:text="@string/Check"
android:layout_alignTop="@+id/imageView2"
android:layout_toRightOf="@+id/imageView2"
android:layout_toEndOf="@+id/imageView2" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonA1"
android:onClick="addf1"
android:text="@string/Add_it"
android:layout_below="@+id/buttonc1"
android:layout_alignLeft="@+id/buttonc1"
android:layout_alignStart="@+id/buttonc1" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/frapeonemarco3"
android:id="@+id/imageView3"
android:layout_alignTop="@+id/buttonc1"
android:layout_toRightOf="@+id/buttonc1"
android:layout_toEndOf="@+id/buttonc1" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonc2"
android:onClick="checkf2"
android:text="@string/Check"
android:layout_above="@+id/buttonA2"
android:layout_alignLeft="@+id/buttonA2"
android:layout_alignStart="@+id/buttonA2" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonA2"
android:onClick="addf2"
android:text="@string/Add_it"
android:layout_below="@+id/buttonc1"
android:layout_toRightOf="@+id/imageView3"
android:layout_toEndOf="@+id/imageView3" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src= "@drawable/oreofrappe"
android:layout_below="@+id/imageView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="37dp"
android:id="@+id/imageView4" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonc3"
android:onClick="checkf3"
android:text="@string/Check"
android:layout_alignTop="@+id/imageView4"
android:layout_toLeftOf="@+id/imageView3"
android:layout_toStartOf="@+id/imageView3" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonA3"
android:onClick="addf3"
android:text="@string/Add_it"
android:layout_below="@+id/buttonc3"
android:layout_toRightOf="@+id/imageView4"
android:layout_toEndOf="@+id/imageView4" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/frappeoriginal3"
android:layout_alignTop="@+id/buttonc3"
android:layout_alignLeft="@+id/imageView3"
android:layout_alignStart="@+id/imageView3"
android:id="@+id/imageView5" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonc4"
android:onClick="checkf4"
android:text="@string/Check"
android:layout_alignTop="@+id/imageView5"
android:layout_toRightOf="@+id/imageView5"
android:layout_toEndOf="@+id/imageView5" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonA4"
android:onClick="addf4"
android:text="@string/Add_it"
android:layout_below="@+id/buttonc4"
android:layout_toRightOf="@+id/imageView5"
android:layout_toEndOf="@+id/imageView5" />
<ImageView
android:layout_width="150dp"
android:layout_height="60dp"
android:background="@drawable/frappesbutton"
android:layout_marginTop="22dp"
android:id="@+id/imageView7"
android:layout_below="@+id/imageView5"
android:layout_alignRight="@+id/imageView5"
android:layout_alignEnd="@+id/imageView5" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/firstcoffee"
android:id="@+id/imageView6"
android:layout_below="@+id/imageView7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="27dp" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonc5"
android:onClick="checkc1"
android:text="@string/Check"
android:layout_alignTop="@+id/imageView6"
android:layout_toLeftOf="@+id/imageView5"
android:layout_toStartOf="@+id/imageView5" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonA5"
android:onClick="addc1"
android:text="@string/Add_it"
android:layout_below="@+id/buttonc5"
android:layout_alignLeft="@+id/buttonc5"
android:layout_alignStart="@+id/buttonc5" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/segundocafe"
android:id="@+id/imageView8"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/buttonc5"
android:layout_toEndOf="@+id/buttonc5" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonc6"
android:onClick="checkc2"
android:text="@string/Check"
android:layout_alignBaseline="@+id/buttonc5"
android:layout_alignBottom="@+id/buttonc5"
android:layout_toRightOf="@+id/imageView7"
android:layout_toEndOf="@+id/imageView7" />
<Button
android:layout_width="80dp"
android:layout_height="35dp"
android:id="@+id/buttonA6"
android:onClick="addc1"
android:text="@string/Add_it"
android:layout_below="@+id/buttonc5"
android:layout_toRightOf="@+id/imageView7"
android:layout_toEndOf="@+id/imageView7" />
</RelativeLayout>
我不确定此错误消息的含义,谷歌搜索没有产生任何有用的结果。有任何想法吗?
这些是我用来组织数据的结构:
yaml: control characters are not allowed
它将我的数据放入的格式是:
type EntriesList struct {
SSHEntries []SSHEntry `yaml:"sshentries"`
}
type SSHEntry struct {
Name string `yaml:"name"`
Command SSHCmd `yaml:"command"`
}
type SSHCmd struct {
Addr string `yaml:"addr"`
Port int `yaml:"port"`
Uname string `yaml:"uname"`
}
我用YAML验证器检查了这个^^,它是合法的YAML。 这是我阅读文件的功能:
---
entrieslist:
- name: entry1
command:
addr: somewhere
port: 22
uname: someone
- name: entry2 ... etc
答案 0 :(得分:3)
想出来,问题是我的缓冲区太大了。如果你的[]字节太大,那么go-yaml会将那些额外的字节作为字符读出并抛出错误。我将代码更改为:
func readConf(CONF string) *EntriesList {
confiFile, err := ioutil.ReadFile(CONF)
check(err)
var entries EntriesList
err = yaml.Unmarshal(confiFile, &entries)
check(err)
return &entries
}
它按预期工作。
答案 1 :(得分:1)
从它的声音中,您在https://github.com/go-yaml/yaml/blob/53feefa2559fb8dfa8d81baad31be332c97d6c77/readerc.go#L347处遇到了错误阻止,看起来这也应该告诉您偏移量(文件中的位置会出现问题)字符)和字符代码。如果这些信息足以解决您的问题,那就太好了。另一方面,如果yaml库正在吐出经验证的yaml,它不习惯接受输入,那么你应该在https://github.com/go-yaml/yaml/issues
上打开Github上维护者的问题。