Golang適当まとめ

あけましておめでとうございます。
本年もよろしくお願いいたします。

  • -

さて、そういうわけでGoogle Goの基本文法など適当に覚えたので適当にまとめます。はい。

自分用メモなので”多分”という表現が多いです。
読む人が読んだら腹が立つと思います。多分。

  • -

最初にちょっと。

Hello Worldを見る。

Hello Worldから大体の雰囲気をつかみとる。

package main

import "fmt"

func main(){
    fmt.Printf("Hello World!\n");
}

>> package main
mainパッケージと命名
クラスのような物らしい。多分。
プログラムはmainパッケージのmain関数->main.main()から始まる。

>> import "fmt"
fmtパッケージをインポート。多分どこかに
package fmt
って宣言した何かがあるんだろうね。多分。
fmtはフォーマット付出力なんかがあるパッケージ。

>> func main(){ ... }
Go言語は関数を
func 関数名(引数)(戻り値){ ... }
で指定します。
ただし、戻り値が無いときは(戻り値)を省略可能、戻り値が一つの時は()が省略可能。多分。

>>fmt.Printf("Hello World!\n");
fmtパッケージのPrintf()関数。
C言語でおなじみのprintf()と機能的には同じ。多分。

セミコロン

Go言語は場合によってはセミコロンが省略出来ます。できるんですが…

  • ")"の直前
  • "}"の直前
  • トップレベルを要求しない。

…めんどくさいです。正直Cと同じく常につける方が安全です。多分。

変数の宣言・代入

変数宣言

 var 変数名 型 = 初期値
が基本形。初期値は省略出来ます。
 var 変数名 = 初期値
省略形第一形態。コンパイラが初期値から最適な型を推測する。
 変数名 := 初期値
省略形第二形態。":="を使うと、「左辺の名前の変数を宣言して右辺より最適型を推測し、代入」が一発でできる。多分やってることはそんなこと。

var value int;
var value int = 10;
var value = 10;

また、Goでは変数宣言の時に初期値を省略すると、なんというか0っぽいものに埋めてくれます。多分。
型によって0だったりNULLポインターだったりnilだったりfalseだったりに勝手に初期化されてくれます。

var value int;
  -> valueの値0
代入

まぁ基本的には
 代入される変数 = 代入する値/変数
です。
面白いところは、
 代入される変数1,代入される変数2,代入される変数3 = 代入する値/変数1,代入する値/変数2,代入する値/変数3
というような形でカンマで区切ることで代入演算子を節約できるところですね。
(多戻り値関数なんかでもこの要領で値を返します。)

 x = 3;
 x,y,z = 3,5,10;

変数の型ですが、
int , float , byte , string
とかがあります。

整数型

intです。integerですね。
int8,int16,int32,int64
というふうに、その後ろにビット数の数字をつけることでそのビット長の変数になります。
兄弟にuintが居ます。unsigned intの略です。多分。
意味は察してください。

var x int;
var y int16;
var p uint;
var q uint16;
浮動小数

floatです。
コレもfloat32とfloat64が居ます。ufloatもあります。
以下省略。

var x float;
var y float32;
var z ufloat;
バイト型

byte。
uint8と同義になります。

var x byte;
文字列型

string。
中身はbyte型配列なんだけど、配列としてアクセスすると怒られます。
近々追記します。

制御構文

条件判断

 if 条件式 {...}
の形。
条件式はだいたいC言語と同じ。多分。
ポイントは条件式をカッコでくくらないで良いこと。
Cのように、後ろに続く処理が1行だからといって中括弧({})を省略出来ないこと。
ほかはCと大差ない。…多分。

if x < 10 {...}
if x == 5 {...}
etc..
繰り返し構文

 for 変数; 条件式; 式 {...}
の形が基本。多分。
 for ;; {...}
無限ループ。
 for {...}
無限ループは実はセミコロン省略できると思う。

for x:=0; x<10; x++ {}
for {...}

 for ;; { break; }
break;文でC言語と同じくbreak可能。

 LoopLabel:for ;; { break LoopLabel;}
こんな感じでラベルをつけてbreakも可能。多分。

スイッチ文

先に例から。

switch value {
    case 0: ...
    case 1: ...
    case 2: ...
            fallthrough;
    case 3: ...
    case 4,5,6: ...
    default: ...
}

基本的にはこんな感じ。多分。

ポイントはデフォルトではフォースルーしない所。
なのでCではbreak;を書いていたけれど、逆にGoではfallthroughを明示する。
>>case 2: ...; fallthrough;
の所みたいにね。
>>case 4,5,6: ...
みたいにカンマで切って指定することもできる。どうやら。多分。