2012年01月31日

Go言語勉強会に行って来ました。

Hello,世界

2012/01/31に神戸GTUG主催のGo言語勉強会に参加しました。

内容は、A Tour of Go日本語版を解説して頂きながらGo言語について学びました。

上記の日本語版を開くと画面左側にソース、右側にソースの解説が載っています。

A Tour of Go

さて、左側のソースをみると、次のようになっています。

package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}
							

1行目はpackage mainとなっていて、5行目のmain()と名前が一致してなければなりません。6行目のPrintlnの最初が大文字となっていまが、これはPublicを意味していて、 小文字だったらprivateです。とセクションごとに説明を頂きましたが、重要そうなところだけメモっときます。

型が変数名の後ろにくる

http://go-tour-jp.appspot.com/#6

package main

import "fmt"

func add(x int, y int) int {
	return x + y
}

func main() {
	fmt.Println(add(42, 13))
}								
							

上記のfunc add(x int, y int) intの赤文字のように、 型が変数x,yの後ろに来ているのがわかります。

また、上記のように (x int, y int)と型がxyの型が同じ場合、 (x, y int)とまとめることができます。

複数の戻り値を返せる

http://go-tour-jp.appspot.com/#8

package main

import "fmt"

func swap(x, y string) (string, string) {
	return y, x
}

func main() {
	a, b := swap("hello", "world")
	fmt.Println(a, b)
}
							

個人的にはこれに衝撃を受けた。関数は複数の戻り値を返すことができるなんて。。。

変数宣言の方法

http://go-tour-jp.appspot.com/#12

package main

import "fmt"

func main() {
	var x, y, z int = 1, 2, 3
	c, python, java := true, false, "no!"

	fmt.Println(x, y, z, c, python, java)
}
							

変数を宣言するには、var x int = 1 とすると、intxを宣言し、1で初期化します。 :=を使用すると、varを使用せずに宣言できます。x:=1で先ほどと同じ意味です。

if文の書き方が面白かった

http://go-tour-jp.appspot.com/#21

package main

import (
	"fmt"
	"math"
)

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	}
	return lim
}

func main() {
	fmt.Println(
		pow(3, 2, 10),
		pow(3, 3, 20),
	)
}
							

ifforには()は付かないというのはすんなり入ったけど、 上記のコードは一目見ただけでは分からなかった。。9行目のとこ。
これは、Pow(x,n)vに代入して、そのvlimより小さかったら、return vとのこと。 ここで宣言された変数vは、ifのスコープだけで有効です。12行目のreturn limの上でvを使うことができません。

構造体とポインタ

http://go-tour-jp.appspot.com/#26

package main

import "fmt"

type Vertex struct {
	X int
	Y int
}

func main() {
	p := Vertex{1, 2}
	q := &p
	q.X = 1e9
	fmt.Println(p)
}
							

まず構造体は、5〜8行目ですね。これはX,Yのフィールドを持つVertexという名前の構造体を定義しています。 11行目で構造体を1,2で初期化された構造体pを定義して、pのアドレスをqに代入しています。 q.X = 1e9qのアドレスとpのアドレスは同じですから、p.Xには1e9が格納されていることになります。
Go言語にアロー演算子がなく、q.Xqがポインタであることが分かりにくいため、ポインタであることを意識しておく必要があるとのこと。

MapとSliceは重要

http://go-tour-jp.appspot.com/#31
http://go-tour-jp.appspot.com/#32

MapとSliceは長くなるので、また次回の勉強会のとこにがっつり説明していただけるとのことです。

タグ:Go
posted by やし at 23:58 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年01月08日

macのjavacで文字化けする

macでjavacすると、エラーコメントが文字化けしたので $HOME/.tcshrcに以下の2行を追加(エンコードをUTF-8にしてる)

alias javac 'javac -J-Dfile.encoding=UTF-8'
alias java 'java -Dfile.encoding=UTF-8'
posted by やし at 15:06 | Comment(0) | Java | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年01月02日

Dartをインストールしてみた。

はじめに

Dartをインストールしてみた。インストール方法は基本的に Googleが発表した新しいプログラミング言語「Dart」を使ってみよう!(2/3):CodeZine を参考にさせてもらったが、ちょっと分からないところと、Mac OS X Lion + Xcode 4.1 では、すんなりいかないみたいだったので 記事に補足する感じで書けたらいいかなぁと思ってます。

インストール環境

  • OS:Mac OS X Lion(10.7)
  • Xcode 4.1

さっそく開始

はじめに必要なものはMacだと、Xcodeとdepot_toolsの2つをインストールすることと PreparingYourMachine - dart -に書かれている。

Xcodeはインストール済みとして、depot_toolsを上記のCodeZineに書かれている通りにインストールした。 ちなみに、depot_toolsのインストール方法の記載の本家は(たぶん)ここ

次が少しはまった

CodeZineの続きで、Dartのソースコードをチェックアウトしたり、gsitilの設定したり、再度gclient syncしたりします。

で、少しはまったところですが、CodeZineに「Xcode 4.1を利用している場合」と書かれている所がありますが、これだけではうまくいかなくて、 Building Google Dart from source (Mac OS X Lion + Xcode 4.2) を参考にしました。ポイントは

  • tools/build.pyファイルの'macosx10.6'→ 'macosx10.7'
  • tools/gyp/configurations_xcode.gypiのGCC_VERSIONを変更
  • ビルドコマンドのオプションを変更。 ./tools/build.py --arch=ia32 --mode=release
です。これでなんとかうまくビルドしてくれるかなと思ったら、

** BUILD FAILED **
The following build commands failed:
PhaseScriptExecution "Action \"generate_frogsh\"" /Users/<username>/dart/dart/xcodebuild/dart-frog.build/Release_ia32/frogsh.build/Script-095A7D91DE56B603C848FB82.sh
(1 failure)
BUILD FAILED

と出た。.shファイルの中身を見たら、${Built_PRODUCTS_DIR} という変数が使われてたので、 どっかで生成しているのかなと思ってgrepしてみたけど、特になし。 環境変数で設定してあげたらうまくいくかなと思って、.tcshrcに
setenv Built_PRODUCTS_DIR $HOME/dart/ 
	
を追加後、source ~/.tcshrcでビルドコマンド./tools/build.py --arch=ia32 --mode=releaseを叩いてみたところ、** BUILD SUCCEEDED ** となってくれたので、とりえあず一件落着。以上です。

タグ:Dart
posted by やし at 22:57 | Comment(0) | Dart | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。