Page History

Home

yhornisse edited this page on 24 Sep 2021

Clone this wiki locally

メモ未整理

  • 値を捨てる時は _ (ブランク識別子)を使う
  • %vでオブジェクトのフォーマットされた内容を出力、%bで2進数(Rubyとかと同じ)
  • 浮動小数はfloat32やfloat64を使用。基本はfloat64を使えばおk
  • 複素数を扱う時はcomplex64やcomplex128を使う。虚数リテラルは1iのように書く。

文字列

  • UTF-8エンコードされたUnicodeコードポイント(ルーン)の列。
  • + で文字列結合可能。
  • 値は不変。新たな文字列を変数に代入することはできるが、文字列内に含まれるバイト列は変更不可能。 s[0] = '0'とかできない
  • 値が不変ということは複製してメモリを共有しても安全。
  • 比較はバイトごとに実施。 <> の比較結果は辞書順。
  • rangeを文字列に使うとUTF-8のデコードを暗黙的に行なっている。
  • 文字列関連のパッケージで主流なものはbytes、strings、strconv、unicode。

strconv.ParseInt("123", 10, 64)で基数は10で、第3引数はint64を示す。strconv.Atoi("123")`でintに変換

演算子

2項演算子 ( 優先順位順)

* / % << >> & &^
+ - | ^
== !=  < <= > >=
&&
||
  • 上記と複合代入演算子がある
  • Goの剰余の符号は被除数の符号と常に一緒。-5/2→-2、-5/-2→-2、--5%2→-1、-5%-2→1
  • &^はAND NOT(ビットクリア)
  • NaN(Not a Number)はnan。0徐算などの結果が含まれる。nanとの等号演算は必ずfalse(nan==nanも)。判定にはmath.IsNaNを使う。
  • 浮動小数の関数で失敗する場合は2つ目の返り値で成功失敗を返すのが無難。
  • >>は算術シフト。シフトした部分には符号が入る。

AND NOT

「x &^ y」の結果は以下の通り

X Y 結果
1 1 0
1 0 1
0 1 0
0 0 0

y=1なら結果は0で、それ以外はxのまま

Printf

        fmt.Printf("%d %[1]c %[1]q\n", 'a') // 97 a 'a'                                                                                                                                                     
        fmt.Printf("%d %[1]c %[1]q\n", '国') // 22269 国 '国'

%qでクォート、dでASCIIコード、またはUnicodeコードポイント。