Go 言語について

  • 簡単に Go 言語を紹介します。

概要

  • 2009 年生まれ。Google 製。C/C++ の置き換え目的らしい。
  • 型ある。コンパイルする。手続き型。
  • シンプルな言語仕様を保つことにこだわっている。
  • とはいえ、型推論などのモダンな一面も。
  • 便利な C 言語と言って良いかもしれない (個人的な感想です)
  • 組み込みからサーバまで、広く使われているプログラミング言語

gopher
Go 言語のマスコットキャラクターの Gopher くん

シンプルな言語仕様

  • 構造体はあるがクラスはない
  • C 言語ライク。C 言語知ってる人からしたら学習コスト低い
  • ループは for しかない
  • ポインタはあるけど演算できない
  • ジェネリクスない
  • クラスないということで継承もない
  • 三項演算とか if 式もない

C に比べて便利なところの例

  • 型推論
  • 宣言した変数は自動的に初期化される
  • 戻り値複数返せる
  • 一気に複数代入できる
  • インターフェースを用いたダックタイピング
  • GC ある

コード例

  • いわゆるハローワールド
package main

import fmt

func main() {
    fmt.Println("Hello world!")
}
  • 余分な部分があるとコンパイル通らない例
package main

import (
    "fmt"
    "os" // 使ってないインポートあるとコンパイル通らない
)

func main() {
    i := 5 // 使ってないやつ変数があるとコンパイル通らない
    for {  // 無限ループしようと思っても while ないので for 使う
        fmt.Printf("hello, world\n")
    }
}

ポータビリティ

  • Go 言語で書いたソースコードはビルドによって一個の実行可能バイナリになる
    • 依存関係をバイナリに抱え込んでいるので、ちょっと古い Linux とかでも動く
      • ただちょっとバイナリサイズがおっきくなりがち
    • 特別な動作環境はいらない (e.g. python、nodejs、ruby)
    • クロスコンパイルが充実。
      • darwin、linux、windows、arm、mips、等などで動くバイナリを生成可能

バイナリサイズをちっさくする工夫

以下のようなビルドオプションを用いた最適化を行ったり、実行バイナリの圧縮だったりをすることで、ある程度小さくできる

  • ldflags="-w"
  • ldflags="-s"
  • UPX (実行バイナリの圧縮)
  • 1 MB 未満まで落とすことが出来る場合も

(参考) Goのバイナリサイズを削減する - そこはかとなく書くよん。

C 言語との親和性

  • Go 言語で書いたソースを shared object、static library にする機能がある
    • C 言語から Go 言語で作ったライブラリを利用することができる
  • 逆に、Go 言語から C 言語で作ったライブラリを利用可能 (cgo という機能)

充実の公式チュートリアル

results matching ""

    No results matching ""