おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


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])を表示しないからバイト単位だね。

Strings, bytes, runes and characters in Go - The Go Blogfmt.Printf% xとか%+qは便利そうだ。 GoのソースコードはUTF-8以外では書けない(ASCIIでは書けるw)。 そしてUTF-8の文字列から「ひと文字(runeを)」取り出す唯一の方法は、 for…rangeループを使うことのようだ*1

これをふまえて、Go言語でパッケージを作成して世界に公開する方法にあったコードを書き直すとすれば、 下記のようになりそうだ。(ここではひっくりかえす文字列も日本語に変更してある。)

*1 と思ったらGo Blogの元記事の直後に、runeValue, width := utf8.DecodeRuneInString(s[i:])という例があった


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>