Skip to content
Go言語とは、Googleが開発した新しいプログラミング言語です。
当サイトではこの新しい言語についての情報を集約していきます。
このサイトの主要コンテンツは、公式サイトの日本語訳です。右側のメニューから選んでください。

Archive

Category: ニュース

本日、Go 1.1がリリースされました。(http://golang.org/doc/go1.1)
以下、Go 1からの変更点の要約です。

ゼロ除算

Go 1では、定数0による除算ではランタイムパニックが発生していましたが、Go 1.1ではコンパイル時にエラーとなります。

Unicodeリテラルのサロゲート

 文字列リテラル、およびルーンリテラルでは、サロゲートハーフが使用できなくなりました。

メソッド値

 新機能の「メソッド値」とは、特定の値をレシーバとする「関数の値」です。
例)f := t.Mv; f(7)

gccgoの状況

 Go言語とGCCのリリーススケジュールとは一致しないため、どうしても差が生じます。
バージョン4.8.0では、Go1.1がほぼ実装されますが、メソッド値は実装されません。

コマンドラインのフラグ処理

 コンパイラなどのGo言語のツール類は、Go言語のflagパッケージと同じ処理に変わります。
【Go 1】 go tool 6c -Fw -Dfoo
【Go 1.1】 go tool 6c -F -w -D foo

64ビット環境におけるintのサイズ

 以前のバージョンでは、どの環境でもintおよびuint型のサイズは32ビットでしたが、64ビット環境では64ビットになります。

64ビット環境におけるヒープサイズ

 64ビット環境における最大ヒープサイズは数ギガ~数10ギガに拡大されました。

Unicode

 UTF-16で、65535以上のコードポイント値を表せるようになりました。これはUTF-16のみで、それ以外ではサロゲート領域のコードポイントは不正となります。

Race detector

 「Race detector」はバグ発見ツールです。現在は64ビットx86プロセッサにのみ対応しています。
例) go test -race

 

Goプログラミング言語仕様の翻訳を最新(Version of September 4, 2012)にアップデートしました。

主に表記が変わっただけです。
「文字(charactor)」→「ルーン(rune)」

Go言語のVersion 1 がとうとうリリースされました。

http://blog.golang.org/2012/03/go-version-1-is-released.html

Goプログラミング言語仕様」の翻訳を更新しました。
バージョンは、June 17, 2011です。

あまり大きな変更はありませんんが、変更点です。

  • gotoの制約が変更され、ブロック外からブロック内へのジャンプができなくなった
  • nilチャネルからの送受信信は、永久にブロックされるようになった。
    ただし、コンパイラはまだ未対応で、ブロックされずにパニックが発生
  • nilマップは、要素が追加できない以外は空のマップと同じ扱いになった。
    これもコンパイラはまだ未対応。

Goプログラミング言語仕様」の翻訳を更新しました。
バージョンは、February 1, 2011です。

チャネル周りが大きく変更されています。

まず、チャネルの非ブロック通信がなくなりました。チャネルの送受信でブロックさせたくないときは、下の例のようにselectステートメントを使用するように書き直す必要があります。

非ブロック送信の例
【old】
	if ch <- v {
		// sent
	} else {
		// not sent
	}

【new】
	select {
	case ch <- v:
		// sent
	default:
		// not sent
	}

非ブロック受信の例
【old】
	v, ok := <-ch
	if ok {
		// received
	} else {
		// not received
	}

【new】
	select {
	case v := <-ch:
		// received
	default:
		// not received
	}


それ以外にも、クローズ済みのチャネルに送信するとパニックを起こすようになっているので注意が必要です。