「Go/変数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
132 行
 
== 整数と浮動小数点数 ==
{{See alsoMain|Go/算術演算と数学関数}}
上記の例のように、浮動小数点数リテラルの型は float64 です。この他に float32 という型もありますが、 float という型はありません。
異なる数値型の間の演算はエラーにはならず、昇格則が働きます。
{{See also|Go/算術演算と数学関数}}
 
=== 以外のビット精度 ===
浮動小数点数型以外に整数型 int にも、ビット幅を伴った、<code>int32</code>, <code>int64</code> や<code>int8</code>, <code>int16</code> があります。
 
このような低精度の整数型にはニーズがないと、感じることがあるかもしれないが回帰型ニューラルネットワークなどの人工知能応用では精度は必ずしも必要なく、メモリーフットプリントの削減と計算時間の削減という意味で今後もニーズがあります。
{{See also|[[../キーワードと宣言済み識別子#数値型|数値型]]}}
 
{|class="wikitable"
|+ Go言語の整数型
! データ型  !!  データ型の説明    !!  ストレージの  <br>ビット長 !!  範囲        
|-
| int8 || 符号あり8ビット整数 || 8 ||  -128 ~ 127
|-
| int16 || 符号あり16ビット整数 || 16 ||  -32768 ~ 32767
|-
| int32 || 符号あり32ビット整数 || 32 ||  -2147483648 ~ 2147483647
|-
| int64 || 符号あり64ビット整数 || 64 ||  <!-- 表サイズ調整のため左に空白 --> -9223372036854775808 ~ 9223372036854775807<!-- 表サイズ調整のため右に空白 --> 
|-
| uint8 || 符号なし8ビット整数 || 8 ||  0 ~ 255
|-
| uint16 || 符号なし16ビット整数 || 16 ||  0 ~ 65535
|-
| uint32 || 符号なし32ビット整数 || 32 ||  0 ~ 4294967295
|-
| uint64 || 符号なし64ビット整数 || 64 ||  0 ~ 18446744073709551615
|-
| int || システムに依存 の 符号あり整数  || <!-- 空白 --> ||  <!-- 空白 -->
|-
| uint || システムに依存 の 符号なし整数  || <!-- 空白 --> ||  <!-- 空白 -->
|}
 
 
int型にはビット精度のほか、正負 ± の符号の有無による区別もあります(C言語でも同様です。)。
 
型指定で単に「int」だけ入力したときに作成される整数は、「符号つき」です。
なので、符号ありの整数では、intの前に、なんの接頭辞もつけません。
 
uint64 などの頭文字「u」は、unsigned (符号なし、「アンサインド」と読む)の意味です。
 
特別な事情のないかぎり、整数型の指定のときには「int」とだけ入力しておけば、Go言語コンパイラが、アーキテクチャにもとづき、自動でビット精度を判断してくれますので、なるべく「int」とだけ入力してコンパイラに任せておくのが簡便でしょう。
 
==== 関数スコープ ====
キーワード var を使って宣言した場合も、 簡略表記「:=」を使った場合にも関数の中で宣言された変数のスコープは関数のブロックです(関数の中のfor文やif文で宣言された場合は文スコープになります)。
また簡略表記「:=」はグローバル変数の宣言には使えません。
{{See also|[[../ブロック・宣言とスコープ#宣言とスコープ|宣言とスコープ]]|[[../ブロック・宣言とスコープ#ブロック|ブロック]]|[[../定数と変数#短い変数宣言|短い変数宣言]]}}
なお、この「:=」演算子は、情報科学では一般に「定義」(ていぎ)と言われますが、しかしGo言語の場合、この演算子の内容は定義ではなく、単にローカル変数を宣言しているだけです。
 
 
==== 文字列型 ====
文字列変数を使うには、初期化に文字リテラル("文字列" の形式)を使い型推論させる方法と、型名 string を明示する方法があります。
{{See also|[[../キーワードと宣言済み識別子#文字列型|文字列型]]}}
単に、代入した文字列を二重引用符 " " でククるだけです。
 
{{コラム|他の言語での文字列型|
 
なお、C++にはstring型はなく標準テンプレートクラスライブラリーの string クラスを使います。JavaScriptには文字列プリミティブとStringオブジェクトがあります(なお標準;C言語には:string型が無く、'\0'で終端されたchar型の配列で表現していますが、文字列の連結などは標準ライブラリの関数となっており、結果を表すバッファのサイズなどへの責任はプログラマ本人が負い。このことが度々バッファオーバープロー等を引き起こし脆弱性の原因となっています。)
;C++:string型はなく標準テンプレートクラスライブラリーの string クラスを使います。
;JavaScript:文字列プリミティブとStringオブジェクトがあります。
|}}
 
==== キーワード ====
206 ⟶ 173行目:
</source>
'''int''' や '''float32''' などの(プリミティブな)型名が含まれていません。
{{See also|[[../キーワードと宣言済み識別子]]}}
 
このため、<source lang=go inline>var int = 123.456 </source>は、float64型の変数 int 値は 123.456 と「正しく」解釈されます。
 
PL/Iのようですね。
 
==== 予め宣言された識別子 ====
236 ⟶ 200行目:
make new panic print println real recover
</source>
{{See also|[[../キーワードと宣言済み識別子]]}}
 
== 型変換 ==