Go Programming Language
プログラミング言語ですか。。
この前、JavaScriptアプリ開発ツール「Closure」を出してビックリしたのに。
とりあえず、どんな言語か
言語の基本Hello world
まで触って見ました。
開発環境
OS: Ubuntu Linux 9.10
CPU: Atom N280
<インストール>
Install Go
を参考に
作業+インストールディレクトリ作成
とりあえず自分はホームディレクトリ以下に
% tree work -d -L 1 work |-- bin |-- dev `-- goこんな感じでwork以下に作りました
環境変数
設定した項目は
- GOROOT(goのroot)
- GOOS(使用するOS)
- Linux系ならlinux, Macなら- darwin, それ以外(?)- nacl
- GOARCH(使用するCPU)
- 64bit x86ならamd64、32bit x86なら386、32bitARMなら、arm
- GOBIN(go バイナリの位置)
- PATH- (パス)
export GOROOT=$HOME/work/go export GOOS=linux export GOARCH=386 export GOBIN=$HOME/work/bin export PATH=$GOBIN:$PATHこいつらを.zshrcに追加
<ソース取得>
と、その前に
mercurialなるものをインストール。
実はこのmercurial って知りませんでした。
git, cvs, svn見たいなものって考えていいんですよね?w
sudo apt-get install mercurial
ソースコードをチェックアウト
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT
<インストール>
と、その前に必要なパッケージを入れる
sudo apt-get install bison gcc libc6-dev edってマニュアルには書いてましたが、自分の環境で新たにインストールされたのはbisonのみでした
後はインストール
$ cd $GOROOT/src $ ./all.bash結構時間かかります
これで開発環境完成。
後は、動かしてみる。
Hello World
tutorialページにあったものをそのまま。 先ほど作った ~/work/dev 以下に hello.goを作る
package main
import "fmt"
func main() {
fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界\n");
}
コンパイル環境変数で386を選択したので
8g hello.goそれ以外はこんな感じ
ファイルとリンク
amd64(a.k.a.x86-64);6g,6l,6c,6a- The most mature implementation. The compiler has an effective optimizer (registerizer) and generates good code (although
gccgocan do noticeably better sometimes).
386(a.k.a.x86orx86-32);8g,8l,8c,8a- Comparable to the
amd64port. Not as well soaked but should be nearly as solid.
arm(a.k.a.ARM);5g,5l,5c,5a- It's got a couple of outstanding bugs but is improving. Tested against QEMU and an android phone.
8l hello.8実行
caraml-laptop% ./8.out Hello, world; or Καλημέρα κόσμε; or こんにちは 世界
echo
もう一つ簡単そうなものから、これもtutorialより
package main
import (
        "os";
        "flag"; // command line option parser
        )
  var omitNewline = flag.Bool("n", false, "don't print final newline")
const (
       Space = " ";
       Newline = "\n";
       )
  func main() {
  flag.Parse(); // Scans the arg list and sets up flags
  var s string = "";
  for i := 0; i < flag.NArg(); i++ {
    if i > 0 {
 s += Space
          }
    s += flag.Arg(i)
      }
  if !*omitNewline {
     s += Newline
      }
   os.Stdout.WriteString(s);
 }
コンパイル&リンク&実行
caraml-laptop% 8g echo.go caraml-laptop% 8l -o echo echo.8 caraml-laptop% ./echo hoge hoge caraml-laptop%すげー簡単というか、取っ付きやすい
マニュアルにもGo For C++ Programmersってあるように
C++を知っている人はすんなり移行できるように作ってあるのかもしれません。
あいにく自分は今までC++を読んだ事はあっても、書いた事は無いのですが、
C言語の知識でも雰囲気はつかめました。
Go                           C++
var v1 int;               // int v1;
var v2 string;            // const std::string v2;  (approximately)
var v3 [10]int;           // int v3[10];
var v4 []int;             // int* v4;  (approximately)
var v5 struct { f int };  // struct { int f; } v5;
var v6 *int;              // int* v6;  (but no pointer arithmetic)
var v7 map[string]int;    // unordered_map* v7;  (approximately)
var v8 func(a int) int;   // int (*v8)(int a);
 
変数の宣言は順番が異なるらしく CとかC++は
型 変数名
だったのが
変数名 型
になってます
Type declarations may be read easily from left to right.って書いてあるけど。 何となくですが、JavaScriptのような、C++のような。。 しばらく触ってみたいと思います






 
0 件のコメント:
コメントを投稿