空のルーン文字を返したいが、返り血をあびるし、戻り値で吐血する
func Foo() (rune, error) {
err := errors.New("my error")
return "", err
}
// Output: cannot use "" (untyped string constant) as rune value in return statement
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
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をセットする」でググっても Golang 初心者でせっかちなものだからピンポイントでタイトルからわかる記事が出てこなかったので、未来の自分のググラビリティのため。
TL; DR (今北産業)
-
0
(ゼロ)を返す。(例:return 0, err
) -
runeの初期値である0(ゼロ)を返す
func Hoge() (rune, error) { err := errors.New("my error") return 0, err }
-
rune
はint32
型のエイリアスですが、Unicode の 1 文字分の文字コードを格納できます。 - 文字列とルーン文字の違い
- Go のソースコードは常に UTF-8 です。
- 文字列は任意のバイトを保持します。
- 文字列リテラルは、バイトレベルのエスケープがなくても、常に有効なUTF-8シーケンスを保持します。
- これらの配列は、
rune
と呼ばれる Unicode コードポイントを表します。 - Go では、文字列内の文字が正規化されることは保証されていません。
TS; DR (ドキュメントを嫁にしたい未来の自分に)
"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
.
(Code points, characters, and runes | Strings, bytes, runes and characters in Go @ Go 公式ブログ より)【筆者訳】
"code point" という言葉は、いささか言いにくいため Go ではこの概念を短くした "rune" という言葉を導入しています。この用語はライブラリやソースコードに登場し、Unicode の「コードポイント」とまったく同じ意味を持ちます。しかし、1 つ面白いことが追加されています。Go 言語では
int32
型の別名(エイリアス)としてrune
という言葉を定義しています。そのため、プログラム内で整数値がコードポイントを表すかどうかを明確にすることができます。さらに、一般的に文字コードと考えられているものは、Go ではルーン定数と呼ばれます。
例えば、"⌘
" という文字をコードで表現する場合、型と値は「rune
型」で「値が整数の0x2318
」と表現できます。
-
Code points, characters, and runes | Strings, bytes, runes and characters in Go @ Go 公式ブログ
- Go言語の文字列、バイト、ルーンと文字(翻訳) @ Qiita
- ゼロ値を使おう #golang @ Qiita
- Goのruneを理解するためのUnicode知識 @ Qiita