1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[The Go Programming Language Specification] Rune

Last updated at Posted at 2019-12-07

Go

Golangのspecificationの日本語訳と、ちょっとした遊びぐらいのコードを載せていく感じで進めようと思うので、
すでにGolangでコードを書いている人にはつまらないかもしれないです

また、間違っている部分があればぜひご指摘いただけると嬉しいです🙇‍♂️

想定する読者層

Rune literals

本記事は公式のドキュメントを参考にしています

rune とは?

Rune literal は int32 の alias で Unicodeを表す整数です
Rune はシングルクウォートで囲まれた1文字以上の文字で表されます
x とか \nです

例えば 'a' の時、は1byteで a ,U+0061, 0x61 を表す
ä は2byteで、0xc30xa4 (もしくはU+00E4, 0xe4)を保持します

fmt.Println(rune('a')) // = 97
fmt.Println('\x61') // = 97

余談

runeでprintした時に表示される数字の意味とは?

ここで不思議なのは 970(\)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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?