【GAE】ねこでもわかるGo言語【helloworld編】

| 0件のコメント

Photo by google

Go言語を勉強し始めたので、コンソールとブラウザ(GAE利用)にご作法通りhelloworldを表示するまでをやります。これからGo言語を学びたい人向けの記事です。

Go言語とは何?

Go言語はGoogleが開発している言語です。
インフラ系のシステムを組むためのシステムプログラミング言語です。

2009年の発表されたGO言語ですが、C言語が登場したのが1972年ですからまだ新生児みたいな言語です。
組み込み系やインフラシステムなどはC/C++言語で書かれていますが、Cのマルチスレッドプログラミングはメモリ管理のしづらさがあります。現在はマルチコアCPUが一般な時代になってきたこともあり、並列処理の得意な言語が注目されてきています。

GO言語もGoroutineという並列処理の機能をもっています。

• コンパイル言語だけど動的プログラミング言語のような記述
• Goroutineによる関数実行の並列化(軽量/メモリ共有)
• ガベージコレクション
• 継承がないオブジェクト指向

ちなみに同名の言語(Go!)はすでにあって、今後は別名になることもありそうです。

個人的には、高度な機能を持った組み込みソフト開発のスタンダードな言語となって欲しいです。
組み込み分野ではスイッチ入れたら10年間動き続けるというマシンもあります。たとえ微小なメモリリークでも致命的になり兼ねないです。CにGCがあればと思いますが、それだとCの利点が削られてしまいます。
Goが組み込みソフトでも使えるくらい広まってほしいです。

開発環境構築

今回の開発環境はMac OS X 10.7.4です。(Python 2.7.1)

ブラウザでGoを実行するのにPythonのインストールが必要です。最近のMac OS Xでは最初から入ってますが,ない環境の人はインストールしてください。

GAE for Go

DLして任意の場所に展開します。次にPythonとGAE for GoのPathを通します。
この設定ファイルが.bash_profile(又は.bashrc や.profile)です。
名前は何でもいいですが、統一した方がいいと思います。

vimなどで追加します。


export PATH=/usr/bin/python:$PATH
export PATH=$HOME/go_appengine_sdk_darwin_386-1.7.0/google_appengine:$PATH

これらの環境変数の設定ファイルは通常Finderに表示されません。ls -aで確認しましょう。
作成したファイルの設定を有効にします。


$ source .bash_profile

念のため環境変数を確認します。


$ echo $PATH
$ python -V

ちなみにgoのEditorのSyntaxHighlightですが、Mac環境ならXCodeとかVimのプラグインとかあります。

Goでhelloworld

初めにテキストエディターでhelloworld.goを作成します。(UTF-8で保存)

package main

import "fmt"

func main() {
    fmt.Printf("helloworld\n")
}

package宣言は、このプログラムがどのパッケージに従うかの宣言です。
続いて、import “fmt”ですが、fmtという簡単なI/Oを行うことができるパッケージを呼び出しています。
Cでいうstdioに近い役割でprintfやscanf関数を使うために必要です。
関数はfunc で記述します。C同様、初めに実行されるのがmain()です。

ターミナルを開きgoツールで作成したファイルを実行します。

# case : build  & exec
$ go build helloworld.go
$ ./helloworld
# case :run
$ go run helloworld.go
helloworld

helloworldと表示されると思います。

続いて、GoogleAppEngine for Goでローカルサーバを立ち上げてブラウザ上にhelloworldを表示させます。

ブラウザでhelloworld

GAE for Goをダウンロードすると、中にDemoファイルが入っています。
これを使って、ブラウザにhelloworldを表示させます。

app.yamlは設定ファイルです。
yaml(ヤムル)は私は知らなかったのですが、XMLより人間に読みやすくしたデータ記法らしいです。最近のスクリプト言語で使う事ができるようです。XML,JSONよりyamlという人も多いみたいです。

application: helloworld
version: 1
runtime: go
api_version: go1

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /.*
  script: _go_app

application:アプリの識別子
version:アプリのヴァージョン
runtime:Goで動かすという宣言
api_version:ランタイムのヴァージョン
handlers : – url : Requestに対する処理を宣言

続いて、helloworld.goを編集します。
importに”net/http”が追加されています。netがTCP/IP、UDP、ドメイン名解決、UNIXドメインソケットを含むUnixネットワークソケットのパッケージを提供します。main()は使えませんのでご注意。


package helloworld

import (
	"fmt"
	"net/http"
)

func init() {
	http.HandleFunc("/", handle)
}

func handle(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "helloworld")
}

ローカルサーバを立ち上げます。ディレクトリに注意して下さい。


$ dev_appserver.py helloworld/

ブラウザを立ち上げてhttp://localhost:8080/にアクセスし、helloworldと表示されたら成功です。

GAEはCPU従量課金ですから、速いGoはスクリプト言語よりお得です。
次回はgoroutineなどについて書きます。

コメントを残す

必須欄は * がついています