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

削除された内容 追加された内容
フォーマット指定子
Ef3 (トーク | 投稿記録)
→‎小数以外のビット精度: 低精度整数型の用途
タグ: 2017年版ソースエディター
183 行
 
=== 小数以外のビット精度 ===
実は、浮動小数点以外整数型 int にも、
 
int32
189 行
int64
などの区別がある。
 
 
さらに、int8やint16などもある。
 
:しかしint8の範囲は -128~127 なので、有効数字2~3ケタの範囲でしかなく、21世紀の現代の用途では、めったに使わない
:int16 の範囲も -32768~32767 というふうに有効数字5ケタ程度なの、使う必要性は乏しいだろう
 
このような低精度、省フットプリントの整数型にニーズがないと感じることがあるかもしれないが、回帰型ニューラルネットワークなどの人工知能応用では精度は必ずしも必要なく、メモリーフットプリントの削減と計算時間の削減という意味で今後もニーズがあります。
古い仕様のC言語など他の言語で、1970年代の古いコンピュータなどを保守する場合にこれらのビット数の整数型を使う可能性もありうるが、しかしGo言語の一般的なサーバ保守用途では、これらの精度は不要であろう。
 
:int32の範囲 は -2147483647 ~ 2147483647 です。
:int32の範囲 は -9223372036854775808 ~ 9223372036854775807 です。
 
 
 
{|class="wikitable"
207 ⟶ 204行目:
! データ型  !!  データ型の説明    !!  ストレージの  <br>ビット長 !!  範囲        
|-
<!--||-->| int8 || 符号あり8ビット整数 || 8 ||  -128 ~ 127
 
<!--||-->| 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 || システムに依存 の 符号なし整数  || <!-- 空白 --> ||  <!-- 空白 -->
|}
 
 
 
238 ⟶ 231行目:
なので、符号ありの整数では、intの前に、なんの接頭辞もつけないのです。
 
uint64 などの頭文字「u」は、unsigned (符号なし、「アンサインド」と読む)の意味です。数学のプラスマイナスの符号のことを英語で「sign」(サイン)といい、その符号が無いので、打ち消しの接頭辞 un をともない、unsigned という意味です。(語尾 ed は、過去分詞の形容詞用法でしょう。これは高校レベルの英文法の話題ですので、説明を省略します。)
 
特別な事情のないかぎり、整数型の指定のときには「int」とだけ入力しておけば、Go言語コンパイラが、アーキテクチャにもとづき、自動でビット精度を判断してくれますので、なるべく「int」とだけ入力してコンパイラに任せておくのが簡便でしょう。(なおC言語の場合、コンパイラにもよりますが2010年ごろのC言語の「int」は通常、32ビット精度の整数を割り当てます。このように、Go言語の「int」とC言語の「int」は割り当ての使用が違いますので、混同しないように。)
符号なしのほうが特殊なので、int の頭に接頭辞「u」をつけて uint にします。この「u」は英語の 打ち消し の接頭辞 un の「u」です。
 
uint64 などの頭文字「u」は、unsigned (符号なし、「アンサインド」と読む)の意味です。数学のプラスマイナスの符号のことを英語で「sign」(サイン)といい、その符号が無いので、打ち消しの接頭辞 un をともない、unsigned という意味です。(語尾 ed は、過去分詞の形容詞用法でしょう。これは高校レベルの英文法の話題ですので、説明を省略します。)
 
21世紀の現代では特別な理由が無い限り、符合ありの整数で充分でしょう。
 
特別な事情のないかぎり、整数型の指定のときには「int」とだけ入力しておけば、Go言語コンパイラが、アーキテクチャにもとづき、自動でビット精度を判断してくれますので、なるべく「int」とだけ入力してコンパイラに任せておくのが簡便でしょう。(なおC言語の場合、コンパイラにもよりますが2010年ごろのC言語の「int」は通常、32ビット精度の整数を割り当てます。このように、Go言語の「int」とC言語の「int」は割り当ての使用が違いますので、混同しないように。)
 
かつて、1970年代あたりのメモリが高価な時代などに、符号なしの型や、8ビット精度や16ビット精度などが利用されたこともあったのかもしれませんが、しかし21世紀の現代には、もはや無用の長物です。また、いまさらレトロな8ビット精度などを使うコードを書くのは、仕事なら同僚などの学習コストを上げてしまうので、むしろ混乱の原因にもなりえます。
 
21世紀の現代でも、色のRGB指定などは0~255の範囲で色の濃さを指定しますので、C言語などでは、そういった用途でメモリ節約のために8ビット精度や16ビット精度を使う場合もありえますが、しかしC言語ならともかく、Go言語でそのような画像処理アプリを書くかどうか、とても不明です。(2020年時点では、Go言語の用途は一般的にサーバ関連です。)
 
 
==== ローカル変数 ====
271 ⟶ 254行目:
 
import "fmt"
 
 
func main() {
338 ⟶ 320行目:
 
 
ただし「variant」のように変数名の一部に予約語の文字列が入っている場合は使用じたいは可能です。(ただし、検索などの際に、まぎらわしいので、避けたほうが安全である。)
 
少なくとも次の25個の文字列は、それぞれGo言語の予約語であるので、Go言語では変数名には使えない文字列です。