2013年12月23日(Mon) 良い天気と思ったら家の周囲だけ曇り [長年日記]
● [golang] Goでの文字列の取り扱い
Goのテストツールを走らせられるようになった気がする ので次はテストしたコードを他から参照できるようにしてみたい。 Go言語でパッケージを作成して世界に公開する方法 at ミネルヴァの梟は黄昏とともに飛び始める(山下 大介 公式ブログ)の通りにすればおっけー、 と思ったけれどそうも行かなかった。 runes := []int(s) (sはstring)とか、 string(runes)といった型変換が、 「error: invalid type conversion」になってしまう。
ちょっと検索して下記を読んでみた。
Arrays, slices (and strings): The mechanics of 'append' - The Go Blog。 …slice難しいなあ。これは後日戻ってきて読みなおさないといけない。 そしてstringはimmutableなslice。 sliceとしてのインデックスはバイト単位で効くのかな? fmt.Println("0"[0:1])は0を表示しないからバイト単位だね。
Strings, bytes, runes and characters in Go - The Go Blog。 fmt.Printfの% xとか%+qは便利そうだ。 GoのソースコードはUTF-8以外では書けない(ASCIIでは書けるw)。 そしてUTF-8の文字列から「ひと文字(runeを)」取り出す唯一の方法は、 for…rangeループを使うことのようだ*1 。
これをふまえて、Go言語でパッケージを作成して世界に公開する方法にあったコードを書き直すとすれば、 下記のようになりそうだ。(ここではひっくりかえす文字列も日本語に変更してある。)
*1 と思ったらGo Blogの元記事の直後に、runeValue, width := utf8.DecodeRuneInString(s[i:])という例があった
最近のツッコまれどころ