Googleの「Go」を試してみた(その2)

昨日に続いて、GoogleのGoを使ってみた印象をレポートします。

Cと微妙に違う文法

GoはCやC++をベースにした言語ですが、文法が微妙に異なります。

例えば、変数の宣言は、以下のように異なります。

C言語

型名 変数名;

Go

var 変数名 型名;

また、if文やfor文では、括弧を使いません。
例えば、「変数xの値が10なら・・・する」というif文は、以下のように書きます。
C言語だと条件の部分を「(x == 10)」と書いていましたが、Goでは括弧を使いません。

if x == 10 {
    ・・・
}

他にも、C/C++と違うところがいろいろとあります。
C/C++に慣れている方にとって、Goに慣れるまでは頭が混乱するかも知れません。

パッケージ

Goには、「パッケージ」(ライブラリのようなもの)という機能があります。
現時点で、基本的なパッケージがいろいろと用意されています。

Goのパッケージの一覧(Goのサイト)

とは言え、まだまだパッケージの種類は十分とは言えません。
例えば、データベースアクセス(MySQL等)のパッケージは、今のところはないようです。
今後パッケージが充実することを期待したいです。

LL以上C/C++未満

Goでは、変数の型付けがあったり、ソースをコンパイルして実行形式を出力したりなど、LL(Lightweight Language)のプログラマーから見ると、難しい言語です。
一方、C/C++と比べると、ガベージコレクションがあったり、ポインタの演算がなかったりなど、C/C++の難しさをある程度緩和する仕組みが導入されています。
「LL以上C/C++未満」といった位置づけの言語だと言えるでしょう。

Webアプリケーション開発にも使える?

Goで作ったプログラムをCGIとして動作させれば、Webアプリケーションを作ることもできます。
例えば、以下のプログラムをコンパイルし、出力ファイルのファイル名を「hello.cgi」にして、CGIを実行できるディレクトリに入れるとします。

package main

import "fmt"

func main() {
    fmt.Printf("Content-type: text/plain\n\n");
    fmt.Printf("Hello, world!");
}

ここで、Webブラウザで「http://コピー先ディレクトリのアドレス/hello.cgi」にアクセスすれば、「Hello, world!」と表示されます。

Hello, world!と表示された

前述したように、今のところパッケージが少ないので、本格的なWebアプリケーションを作るのは、まだ難しいです。
しかし、今後パッケージが増えてくれば、Webアプリケーション開発にも使いやすくなっていくでしょう。

最近ではWebアプリケーションが巨大化して、PerlやPHP等のインタプリタの言語では、動作が重くなりがちです。
一方、Goならプログラムをコンパイルするので、PerlやPHPよりも高速な動作が期待できます。
今後は、Goで作ったWebアプリケーションも登場すると思われます。