□The Go Blog by Renée French

Go の学習を始めたので、基本の文法について書きます。

Goとは

  • Google を中心に 2009 年開発されたプログラミング言語

近代的な言語ではありますがこのタイミングで学習を始めている僕としては、 開発から 10 年以上経っているので、割と経っているんだなぁという印象です。

よく巷で下記のような特徴が挙げられます。

  • 学習コストが低い
  • 記述がシンプル
  • 並行処理 , 並列処理が可能
  • 高速で動作する

学習コストについて、 低い、高いというのを見たり聞いたりする中で 改めて私が新たな言語を学び思ったことは、 「別のプログラミング言語を扱ってた人」というのが前提としてあるように思いました。 その上で Go の学習は、文法や package 管理などが複雑ではないことと、文法チェックが厳格のため学びやすい。 と感じました。

  • Go or Golang

正式名称は “Go” になるみたいですね。 ポケモン GO とかドラクエ Go などの行っちゃう系が出てきて、 検索時に “GO” だけで検索をするとゲームアプリ系も出てきてしまうための区別で “Golang” ってなってたりするみたいですね。(知らんけど)

文法

前置きがやや長くなりましたが、冒頭の通り今回は基本文法についてを記載していきす。 細かい内容や全体を網羅はしていない方向になります。

構文構成

文末はセミコロン不要。 改行して同じ内容として扱う場合は、カンマ(,)を使用。

型

記載以外にも型はあるが(特に数値型)、よく利用されるものを記載。

型種別値説明
int数値省略
float64浮動小数点型64bitPC 時の小数点
float32浮動小数点型 (32bitPC)32bitPC 時の小数点
string文字列
bool真偽値true or false
[5]int配列 “[5]” は配列数 “int” 部は利用したい型要素数を決めて生成
slice参照型、可変長配列要素数指定なしで生成。初期値は2パターン。[]intの場合nil , make([]int, 0)の場合空スライス
interfaceインタフェース型
struct構造体型

変数

宣言

変数の宣言は下記の 2 通り。 2 つとも初期化と代入を同時に行っている。

var str string = "string"
str := "string"         // こちらは省略形

通常宣言時には 1. var を使い、その後に下記の順番になります。

  1. 変数名
  2. 型
  3. 値

再代入

通常の宣言と省略時の変数再代入は基本的な文法と変わらない。

// 通常
var str string = "string" // 宣言
str = "changeVal"         // 代入

// 省略形
str := "string"   // 宣言
str = "changeVal" // 代入

もちろん str := "string" は”初期化と宣言”のため下記のよう再代入不可。

str := "string"
// 再代入で省略文法を使う
str := "changeVal" // エラーになる

条件式

if , for , switch 全て条件部の括弧 () は不要。

if - 動作確認

    number := 1
    if number == 1 {
        fmt.Println("1です")
    } else if number == 2 {
        fmt.Println("2です")
    } else {
        fmt.Println("それ以外です")
    }

for - 動作確認

繰り返し処理は while などはなく for を使うのみになる。 条件の記載は、 初期化i := 0;条件i < 10;後処理i++ C,Java,JavaScript などと同じ記載で、セミコロンで区切る。 breakやcontinueなども同様に扱える。

    for i := 0; i < 10; i++{
        if i == 3 {
            fmt.Println(i)
            //繰り返し forの中に戻る
            continue
        }
        if i > 3 {
            fmt.Println("4以上は抜ける")
            //強制終了
            break
        }
    }
    fmt.Println("3まで")

swich - 動作確認

  • default がある場合は retrun 不要
  • fallthrough が含まれる場所は switch 内での次の処理も行う
    i := 0
    switch i {
    case 0:
        fmt.Println("zero")
    case 1, 2, 3, 4, 5: // 1~5の場合
        fmt.Println("primary number")
        fallthrough // 続行 (次節がcaseの場合も同様)
    default: // 上記以外
        fmt.Println("good number")
    }

関数

  • 関数の宣言に func を宣言する

引数、戻り値なし - 動作確認

  • 関数名の後の括弧内に何も記載しない
func myPrint() {
	fmt.Println("hello world")
}

引数有り、戻り値なし - 動作確認

  • 関数名の後の括弧内に変数名、型を記載する
func myPrint(receveString string) {
    fmt.Println(receveString)
}

引数有り、戻り値あり

func myPrint(receveString string) string {
    newString := receveString + " and string"
    return newString
}
  • 戻り値名前指定 - 動作確認
  • retrun に変数名が不要になる
func myPrint(receveString string) (returnString string) {
    returnString := receveString + " and string"
    return
}

その他

  • ポインタ
  • 構造体
  • メソッド
  • interface
  • panic
  • Goroutine
  • Channel
  • defer 文

など諸々ありますが、(これらの方が大事そうではあるけど)この辺はまた次回に。

ありがとうございました。