Go
Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです
また、間違っている部分があればぜひご指摘いただけると嬉しいです🙇♂️
想定する読者層
- Golang初めてそこまで期間が経っていない
- 英語の公式読むの辛い
Rune literals
本記事は公式のドキュメントを参考にしています
rune とは?
Rune literal は int32 の alias で Unicodeを表す整数です
Rune はシングルクウォートで囲まれた1文字以上の文字で表されます
x
とか \n
です
例えば 'a'
の時、は1byteで a
,U+0061
, 0x61
を表す
ä
は2byteで、0xc3
と 0xa4
(もしくはU+00E4
, 0xe4
)を保持します
fmt.Println(rune('a')) // = 97
fmt.Println('\x61') // = 97
余談
runeでprintした時に表示される数字の意味とは?
ここで不思議なのは 97
と 0(\)x61
だと思います
これらの数字はASCIIと呼ばれる文字コードの対応表を見ると理解できます
97
という数字はASCIIコード表では10進数で表現した時にa
を意味します
0x61
という数字はASCIIコード表では16進数で表現した時にa
を意味します
ちなみに 0x
の x は 16進数を表す hexadecimal
の3番目の文字からきているらしいです(不思議ですね)
これまでrubyやphpを触った時にruneという概念に出会ったことがなかったので、最初はとても戸惑いました
しかし、上記のことを理解するとruneのことが少し怖くなくなるのではないでしょうか
runeの宣言方法
runeで変数を宣言と初期化は他の型と同様にする
var r rune
var r rune = 123
サンプルプログラム
文字列をruneにしてみる
package main
import "fmt"
func main() {
s := "astring"
fmt.Println([]rune(s))
for _, c := range s {
fmt.Println(c)
}
}
[97 115 116 114 105 110 103]
97
115
116
114
105
110
103
runeで比較
package main
import "fmt"
func main() {
hex := '\x61'
fmt.Println(hex)
if hex == 97 {
fmt.Println(true)
}
if '\x61' == rune('a') {
fmt.Println(true)
}
if rune('a') == 97 {
fmt.Println(true)
}
}
97
true
true
true