Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UTF-8 依存の Go コードとは?

acomagu
June 29, 2019

UTF-8 依存の Go コードとは?

BigLT 2019

acomagu

June 29, 2019
Tweet

More Decks by acomagu

Other Decks in Technology

Transcript

  1. UTF-8依存? 非依存? func cast(str string, bts []byte, rns []rune) {

    return string(bts) } []byte -> string 非依存
  2. UTF-8依存? 非依存? func cast(str string, bts []byte, rns []rune) {

    return []byte(str) } string -> []byte 非依存
  3. UTF-8依存? 非依存? func cast(str string, bts []byte, rns []rune) {

    for i := 0; i < len(str); i++ { _ = str[i] } }
  4. UTF-8依存? 非依存? func cast(str string, bts []byte, rns []rune) {

    for i := 0; i < len(str); i++ { _ = str[i] } } 非依存
  5. UTF-8依存? 非依存? func cast(str string, bts []byte, rns []rune) {

    bytes.Index([]byte(str1), []byte(str2)) } 依存
  6. ① ASCII 依存にしない 例えば: UTF-8 で ”Number” はたくさんある → Unicode

    のキャラクタクラスを適切に利用する → コメントに ASCII Number のみと記載する
  7. ③ Grapheme Cluster を意識する Grapheme Cluster とは? → 「1文字の境界」を定義する仕様 「1文字

    == 1コードポイント」じゃないの? → Variation Selector が付与されている場合がある
  8. まとめ - Go の型には UTF-8 依存のものはないが、キャストなどには いくつかある - ASCII 依存

    / PRECIS / Grepheme Cluster を意識する → どこまで対応しているのかドキュメントでしっかり明確にしよ う