![remenbergolang_title](https://stat.ameba.jp/user_images/20151128/01/n-miyata080825/b1/25/p/t02200319_0257037313496082696.png?caw=800)
久々に触ったら予想以上に忘れてました。
その昔Go言語を勉強していた際に、
作っていたコンソールアプリがあった事を思い出した。
当時コンソールアプリばっかり見ていた俺は
termboxなるすばらっしい物を触っていた。
作りかけだったので作業をすすめたい。
が、Go言語自体久々だったもんで、
かなり時間を食ってしまった。
今後忘れないように備忘録として残す。
動きは単純で
1.名前だけを入力する取引先入力画面(Xmlに出力)
2.連番と名前などを一覧表示する画面(Xmlから読込)
たったそれだけならすぐだろうとタカをくくっていた。
1時間前の自分をぶん殴りたい。
では早速備忘作業。
対象データ定義
import(
"encoding/xml"
)
type CustomerMaster struct{
XMLName xml.Name "CustomerMaster"
Customer[] Customer
}
type Customer struct{
XMLName xml.Name "Customer"
CustomerCd int
CustomerName string
AddDate string
ModifyDate string
}
Xmlから読込を行う部分
datas := CustomerMaster{}
xmlFile, err := os.Open("CustomerMaster.xml")
if err != nil {
panic(err)
}
defer xmlFile.Close()
XmlData, _ := ioutil.ReadAll(xmlFile)
xml.Unmarshal(XmlData, &datas)
↑の例だと、
datas.Customer[index]で各要素にアクセス。
Xmlへ出力を行う部分
filename := "CustomerMaster.xml"
file, _ := os.Create(filename)
xmlWriter := io.Writer(file)
enc := xml.NewEncoder(xmlWriter)
enc.Indent(" ", " ")
if err := enc.Encode(datas); err != nil {
panic(err)
}
まぁ、ここまでなら特に問題なく進むだろう。
問題はココからだ。
久々のWindowsでコンソールアプリを作った俺は、
文字コードの事などさっぱい気付いていなかった。
文字化け怖い。
備忘の為に書いておこう、
stringとかruneとか忘れるな。
![remenbergolang_result](https://stat.ameba.jp/user_images/20151128/01/n-miyata080825/b5/50/p/t02200068_0625019213496082695.png?caw=800)
ちゃんと書けたし読み込めた。