💻
日本語は公開できない #golang
第15回『プログラミング言語Go』オンライン読書会 で思い出した小ネタをひとつ。
前回書いた記事から調子に乗って十干十二支を数え上げるパッケージを作ってみた。実用性は考えない(笑)
この中で十干十二支をシンボル化するのに
zodiac.go
type Kan10 uint
const (
Kinoe Kan10 = iota // 甲(木の兄)
Kinoto // 乙(木の弟)
Hinoe // 丙(火の兄)
Hinoto // 丁(火の弟)
Tsutinoe // 戊(土の兄)
Tsutinoto // 己(土の弟)
Kanoe // 庚(金の兄)
Kanoto // 辛(金の弟)
Mizunoe // 壬(水の兄)
Mizunoto // 癸(水の弟)
KanMax
)
type Shi12 uint
const (
Rat Shi12 = iota // 子
Ox // 丑
Tiger // 寅
Rabbit // 卯
Dragon // 辰
Snake // 巳
Horse // 午
Sheep // 未
Monkey // 申
Rooster // 酉
Dog // 戌
Boar // 亥
ShiMax
)
という感じに書いたんだけど,本当は
type Kan10 uint
const (
甲 Kan10 = iota
乙
丙
丁
戊
己
庚
辛
壬
癸
)
const (
子 Shi12 = iota
丑
寅
卯
辰
巳
午
未
申
酉
戌
亥
)
と書きたかったのよ。でも lint で
zodiac.go:8:2: `甲` is unused (deadcode)
甲 Kan10 = iota
^
という感じに,ものごっつ怒られてしまった。
考えてみたら日本語の漢字や仮名は「大文字ではない」から,これらの文字で始まる識別子はパッケージ外部に公開できないんだよね。ちなみに全角の英字なら大文字があるので公開できる。わざわざ全角にする意味はないけど。
というわけで Go の仕様の意外な落とし穴にハマってしまったよ orz
参考
Discussion