一応Goの標準ライブラリにtext/widthというパッケージがあるのですが半角カタカナの濁音・半濁音を正しく(プ<=>プなど)変換できていなかったので変換するgo-mojiパッケージを作りました。インターフェースの部分でMoji.jsを参考にさせて頂きました。
前置き
この記事を書きながら調べてて知ったんですがtext/unicode/normというのもあるんですね... 使い方がややこしそうですが中身をこれに引っ越すかもしれません。
インストール方法
go getしましょう
$ go get github.com/ktnyt/go-moji
使い方
package main
import (
"fmt"
"github.com/ktnyt/go-moji"
)
func main() {
s := "ABC ABC あがぱ アガパ アガパ"
// 全角英数を半角英数に変換
fmt.Println(moji.Convert(s, moji.ZE, moji.HE))
// 半角英数を全角英数に変換
fmt.Println(moji.Convert(s, moji.HE, moji.ZE))
// ひらがなをカタカナに変換
fmt.Println(moji.Convert(s, moji.HG, moji.KK))
// カタカナをひらがなに変換
fmt.Println(moji.Convert(s, moji.KK, moji.HG))
// 全角カタカナを半角カタカナに変換
fmt.Println(moji.Convert(s, moji.ZK, moji.HK))
// 半角カタカナを全角カタカナに変換
fmt.Println(moji.Convert(s, moji.HK, moji.ZK))
// 全角スペースを半角スペースに変換
fmt.Println(moji.Convert(s, moji.ZS, moji.HS))
// 半角スペースを全角スペースに変換
fmt.Println(moji.Convert(s, moji.HS, moji.ZS))
}