[Windows で Go] Go で Hello, World する
|(この記事は「WindowsでGo」の第3回です)
ひとは、いったいいつまで同じ Hello, World を繰り返すのだろう…。
考えてみたら、ぼくは子どものころ K&R で Hello, World をやってから、
はやウン十年。言いたくない、振り返りたくない…。
ということで、いよいよ Windows 環境の Go で Hello, World のスクリプト
を書いてみるぞなもし。
Hello, World
スクリプトファイルを書く
とりあえずスクリプトファイルを何らかの方法で書く。
- コマンドプロンプトを開く
- コマンドラインで
> copy con hello.go
などとしてhello.go
ファイルの編集をはじめる。
もちろんcopy
コマンドを使う苦行を味わいたくな
い人はお好きなエディタでどうぞ - ソースコードは以下のとおり:
package main import "fmt" func main() { fmt.Printf("Hello, world.\n") }
CTRL+Z
するか保存してエディタを終了
なんかね。こうやってソース見ると、
- 「Cっぽい?」
- 「package mainなんてPerlと同じで暗黙の了解にすればいいのに」
とかいろいろ思いを馳せるものがあるね。
即実行してみる
さて、書いたスクリプトファイルを実行してみないとね。
Go はコンパイラ型言語だけど、前にも書いたように即実行もできる。
go コマンドから run サブコマンドを呼び出すという方法。
Windows 用に「.go拡張子がついていればこんなことしなくていい」
方法も書いたけど、今回はとりあえずやってみよう。
- 先ほどのコマンドプロンプトから
> go run hello.go
を実行 Hello, world.
と表示されれば成功
やったね、たえちゃん! うまく動いたよ!
宇宙刑事shebang
ところで、スクリプトファイルの先頭に書く、
#!/usr/bin/env perl
みたいな「shebang」って、Go の場合どうするんだろう。
Go の shebang は珍妙だけれど、
//usr/bin/env go run $0 $@ ; exit
と書く(もしかしたらBSD系だかなんだか、UNIXの種類によっては動かない
かもしれない)。
もちろん Windows には関係ないんだけれども、スクリプトファイルとして
のポータビリティを考えると、書いておくとうれしいだろう。
shebang も反映した先ほどのスクリプトファイルは以下のようになる。
//usr/bin/env go run $0 $@ ; exit
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
}
GoogleがGoのコメントアウトに「#」を採用しなかったのと、
go run
が単体コマンドとして提供されなかったのがこの
覚えづらい shebang につながっているわけだけれど。
まあ、覚えられるようになったら一行目に書きましょう。
バイナリをビルドする
まがりなりにも Go はコンパイル言語なので、突っ込まれる前に先ほどの
スクリプトファイルからバイナリ(EXEファイル)をビルドしてみよう。
別にそう難しくない。
- 先ほどのコマンドプロンプトから
go build hello.go
を実行 hello.exe
ができあがっていれば成功
だ。
スクリプトが動いてさえいれば、一発で成功するでしょ。
なんだ、簡単じゃねえか。
ファイルサイズ2メガバイトくらいなんだけど、このバイナリはほかのWindows
に持って行ってもすんなり動いてくれる。もちろん、スクリプトファイルと
して動作させているのよりも速くね。ここらへん、当たり前なんだけど、
Perl だと PAR とか使わなきゃいけなかった(しかも構築がめんどうだった)
のと比べると大きなアドバンテージやね。
ということで、気が向いたら次回以降はもうちょっと実用的なスクリプトを書いて
みよう。