【Golang】空の rune をセットする（はたまた rune の初期化）

> 空のルーン文字を返したいが、返り血をあびるし、戻り値で吐血する

```golang:""で切り返すと返り血をあびる
func Foo() (rune, error) {
	err := errors.New("my error")

	return "", err
}
// Output: cannot use "" (untyped string constant) as rune value in return statement
```

```golang:new()で戻すと吐血する
func Bar() (rune, error) {
	err := errors.New("my error")

	return new(rune), err
}
// Output: cannot use new(rune) (value of type *rune) as rune value in return statement
```

```golang:nilても焼いても食えない
func Buzz() (rune, error) {
	err := errors.New("my error")

	return nil, err
}
// Output: cannot use nil (untyped nil value) as rune value in return statement
```

[「"golang" 空のruneをセットする」でググって](https://www.google.com/search?q=%22golang%22+%E7%A9%BA%E3%81%AErune%E3%82%92%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B)も Golang 初心者でせっかちなものだから**ピンポイントでタイトルからわかる記事が出てこなかった**ので、未来の自分のググラビリティのため。

## TL; DR <sub><sup><sub><sup>（今北産業）</sup></sub></sup></sub>

1. `rune` は `int32` 型のエイリアスです。Unicode の 1 文字分の<ruby>文字コード<rt>コードポイント</rt></ruby>を UTF-8 で格納できます

1. `0`（ゼロ）を返す。（例:`return 0, err`）

    ```golang:runeの初期値である0（ゼロ）を返す
    func Hoge() (rune, error) {
    	err := errors.New("my error")
    
    	return 0, err
    }
    ```
1. 文字列とルーン文字の違い
    - Go のソースコードは常に UTF-8 です。
    - 文字列は任意のバイトを保持します。
    - 文字列リテラルは、バイトレベルのエスケープがなくても、常に有効なUTF-8シーケンスを保持します。
    - これらの配列は、<ruby>`rune`<rt>ルーン</rt></ruby>と呼ばれる Unicode コードポイントを UTF-8 に変換したものを表します
    - Go では、文字列内の文字が正規化されることは保証されていません。

## TS; DR <sub><sup>（ドキュメントを嫁にしたい未来の自分に）</sup></sub>

>> "Code point" is a bit of a mouthful, so Go introduces a shorter term for the concept: _rune_. The term appears in the libraries and source code, and means exactly the same as "code point", with one interesting addition.
>> The Go language defines the word rune as an alias for the type int32, so programs can be clear when an integer value represents a code point. Moreover, what you might think of as a character constant is called a _rune constant_ in Go. The type and value of the expression
>>
>> ```
>> '⌘'
>> ```
>> is rune with integer value `0x2318`.
>> <sub><sup>（[Code points, characters, and runes](https://blog.golang.org/strings#TOC_5.) | Strings, bytes, runes and characters in Go @ Go 公式ブログ より）</sup></sub>
> 
> 【筆者訳】
> "code point" という言葉は、いささか言いにくいため Go ではこの概念を短くした "<ruby>rune<rt>ルーン</rt></ruby>" という言葉を導入しています。この用語はライブラリやソースコードに登場し、**Unicode の「<ruby>[コードポイント](https://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E7%82%B9)<rt>符号位置</rt></ruby>」とまったく同じ意味**を持ちます。しかし、1 つ面白いことが追加されています。
>
> Go 言語では `int32` 型の別名（エイリアス）として `rune` という言葉を定義しています。そのため、プログラム内で**整数値がコードポイントを表すかどうかを明確にすることができます**。さらに、一般的に文字コードと考えられているものは、Go では<ruby>ルーン定数<rt>rune constant</rt></ruby>と呼ばれます。
> 例えば、"`⌘`" という文字をコードで表現する場合、型と値は「`rune` 型」で「値が整数の `0x2318`」と表現できます。

- [Code points, characters, and runes](https://blog.golang.org/strings#TOC_5.) | Strings, bytes, runes and characters in Go @ Go 公式ブログ
    - [Go言語の文字列、バイト、ルーンと文字（翻訳）](https://qiita.com/KojiOhki/items/cf50c3afe52624b5f69e) @ Qiita
- [ゼロ値を使おう #golang](https://qiita.com/tenntenn/items/c55095585af64ca28ab5#go%E3%81%AE%E5%A4%89%E6%95%B0%E3%81%AF%E5%BF%85%E3%81%9A%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%95%E3%82%8C%E3%82%8B) @ Qiita
- [Goのruneを理解するためのUnicode知識](https://qiita.com/seihmd/items/4a878e7fa340d7963fee) @ Qiita