Go 1 リリース以前のリリース履歴

このページでは、Go 1 より前のGoの安定版リリース間の変更点をまとめたものです。リリース履歴ページで、最近のリリースに関するノートを参照してください。

r60 (2011年9月7日リリース)

r60リリースはweekly.2011-08-17に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な概要については、週刊リリースノートを参照してください。完全な情報については、Mercurial変更リストを参照してください。

言語

"else"ブロックには、"else"の本体が別の"if"でない限り、中括弧が必要になりました。gofmtは常にこれらの括弧を挿入するので、gofmtでフォーマットされたプログラムは影響を受けません。他のプログラムを修正するには、gofmtを実行します。

パッケージ

httpパッケージのURL解析とクエリエスケープコード(ParseURLURLEscapeなど)は、新しいurlパッケージに移動され、名前がいくつか簡素化されました。クライアントコードはgofixで自動的に更新できます。

imageパッケージでは、image.RGBAimage.NRGBAなどの構造体タイプのPixフィールドに大きな変更が加えられました。image.Imageインターフェース型は変更されていませんが、Pixフィールドを明示的に参照しない場合は、コードを変更する必要はありません。たとえば、image/jpegパッケージを使用して複数の画像をデコードし、image/drawを使用してそれらを合成し、image/pngを使用して結果をエンコードする場合、コードは以前と同じように動作するはずです。コードがPixフィールドを参照する場合は、コードの更新方法についてはweekly.2011-07-19のスナップショットノートを参照してください。

templateパッケージは、新しいテンプレートパッケージ(以前はexp/template)に置き換えられました。元のtemplateパッケージはold/templateとして引き続き使用できます。old/templateパッケージは非推奨であり、削除されます。Goツリーは新しいtemplateパッケージを使用するように更新されました。古いtemplateパッケージのユーザーは、新しいパッケージへの切り替えを推奨します。templateまたはexp/templateを使用するコードは、インポート行をそれぞれ"old/template"または"template"に変更する必要があります。

ツール

Goinstallは、新しいタグ選択スキームを使用するようになりました。ダウンロードまたは更新時に、goinstallはローカルのGoバージョンに対応する"go."プレフィックスのタグまたはブランチを探します。Go release.r58の場合はgo.r58を探します。weekly.2011-06-03の場合はgo.weekly.2011-06-03を探します。特定のgo.Xタグまたはブランチが見つからない場合、最も近い以前のバージョンを選択します。適切なタグまたはブランチが見つかった場合、goinstallはそのバージョンのコードを使用します。それ以外の場合は、バージョン管理システムによって選択されたデフォルトのバージョンを使用します。ライブラリ作成者は、ライブラリへのアクセス性を高めるために、リポジトリで適切なタグ名またはブランチ名を使用することをお勧めします。

マイナーな改訂

r60.1にはリンカーの修正goplay修正2つ、jsonパッケージの修正、新しいstructタグオプションが含まれています。

r60.2は、マップに関連するメモリリークを修正します。

r60.3はreflectのバグを修正します。

r59 (2011年8月1日リリース)

r59リリースはweekly.2011-07-07に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な概要については、週刊リリースノートを参照してください。完全な情報については、Mercurial変更リストを参照してください。

言語

このリリースには、gotoの使用を制限する言語の変更が含まれています。本質的に、ブロックの外側のgoto文は、そのブロック内のラベルにジャンプできません。gotoを使用している場合は、コードを変更する必要がある場合があります。この変更セットで、新しいルールがGoツリーにどのように影響したかを確認してください。

パッケージ

通常どおり、gofixは、パッケージAPIに対するこれらの変更に必要な書き換えの大部分を処理します。

httpパッケージには、ファイルへのアクセスを提供する新しいFileSystemインターフェースがあります。FileServerヘルパーは、明示的なファイルシステムルートではなく、FileSystem引数を取るようになりました。独自のFileSystemを実装することで、FileServerを使用して任意のデータをサービスできます。

osパッケージErrorString型は非表示になりました。os.ErrorStringのほとんどの使用はos.NewErrorで置き換えることができます。

reflectパッケージは、複数のパッケージ間でstructタグの共有を可能にする新しいstructタグスキームをサポートしています。このスキームでは、タグは次の形式にする必要があります。

	`key:"value" key2:"value2"`

StructField型のTagフィールドは、Getメソッドを持つStructTag型になりました。jsonxmlのクライアントを更新する必要があります。次のように記述されているコード

	type T struct {
		X int "name"
	}

は次のようにする必要があります。

	type T struct {
		X int `json:"name"`  // or `xml:"name"`
	}

新しい構文を使用する必要があるstructタグを識別するには、govetを使用します。

sortパッケージIntArray型はIntSliceに名前が変更され、同様にFloat64SliceStringSliceも名前が変更されました。

stringsパッケージSplit関数は、SplitSplitNに分割されました。SplitNは古いSplitと同じです。新しいSplitは、最後の引数が-1のSplitNと同等です。

image/drawパッケージDraw関数は、コンポジット演算子という追加の引数を取るようになりました。不明な場合は、draw.Overを使用します。

ツール

Goinstallは、任意のリモートリポジトリ(Google Code、GitHubなどだけでなく)からパッケージとコマンドをインストールするようになりました。詳細はgoinstallのドキュメントを参照してください。

r58 (2011年6月29日リリース)

r58リリースは、追加のバグ修正を含むweekly.2011-06-09に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な概要については、週刊リリースノートを参照してください。完全な情報については、Mercurial変更リストを参照してください。

言語

このリリースでは、gotoを誤用するプログラムでの初期化されていないメモリの使用を修正しています。

パッケージ

通常どおり、gofixは、パッケージAPIに対するこれらの変更に必要な書き換えの大部分を処理します。

httpパッケージは、Client.GetメソッドからfinalURL戻り値を削除しました。この値は、http.Responseの新しいRequestフィールドから利用できるようになりました。ほとんどのtype map[string][]stringのインスタンスは、新しいValues型に置き換えられました。

execパッケージは、より便利で簡潔なAPIで再設計されました。

strconvパッケージQuote関数は、unicode.IsPrintで印刷可能と分類されていないUnicodeコードポイントのみをエスケープするようになりました。以前は、Quoteはすべての非ASCII文字をエスケープしていました。これは、fmtパッケージの"%q"フォーマットディレクティブにも影響します。以前の引用動作は、strconvの新しいQuoteToASCII関数から引き続き使用できます。

os/signalパッケージSignalUnixSignal型はosパッケージに移動されました。

image/drawパッケージは、exp/drawの新しい名前です。exp/drawからのGUI関連コードは、exp/guiパッケージにあります。

ツール

Goinstallは、GOPATH環境変数を監視して、独自のコードと外部ライブラリをGoツリーの外でビルドおよびインストールし(Makefileの記述を回避し)、ます。

マイナーな改訂

r58.1は、GoをOS X 10.7 Lionで実行できるようにするためのビルドランタイムの変更を追加します。

r57 (2011年5月3日リリース)

r57リリースは、追加のバグ修正を含むweekly.2011-04-27に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な概要については、週刊リリースノートを参照してください。完全な情報については、Mercurial変更リストを参照してください。

新しいgofixツールは、古いAPIを使用するGoプログラムを見つけて、新しいAPIを使用するように書き換えます。新しいGoリリースに更新した後、gofixはプログラムに必要な変更を加えるのに役立ちます。Gofixは以下で説明するhttp、os、syscallパッケージの変更を処理し、プログラムを更新してライブラリの将来の変更に対応します。Gofixはすべての状況を完璧に処理できるわけではないため、コミットする前に、gofixが行った変更を読み、テストしてください。詳細はgofixのブログ投稿を参照してください。

言語

複数代入構文closed関数を置き換えます。チャネル受信の構文では、オプションの2番目の代入値として、チャネルが閉じているかどうかを示すブール値を指定できます。このコード

	v := <-ch
	if closed(ch) {
		// channel is closed
	}

は、次のように記述する必要があります。

	v, ok := <-ch
	if !ok {
		// channel is closed
	}

使用されていないラベルは、使用されていないローカル変数と同様に、非合法になりました。

パッケージ

gobパッケージは、GobEncoderGobDecoderインターフェースを実装する型の値をエンコードおよびデコードするようになりました。これにより、エクスポートされていないフィールドを持つ型が自己整合的な記述を送信できます。例としては、big.Intbig.Ratがあります。

http パッケージ が再設計されました。クライアント側では、送信されるヘッダーやリダイレクトの追跡など、HTTP の詳細をより詳細に制御できる新しい ClientTransport 抽象化が導入されました。これらの抽象化により、OAuth2 などの機能を追加するカスタムクライアントを容易に実装できます。サーバー側では、ResponseWriter の非本質的なメソッドが削除されました。Hijack および Flush メソッドは不要になり、コードは特定の値が Hijacker または Flusher を実装しているかどうかを確認することでテストできます。RemoteAddr および UsingTLS メソッドは、Request の RemoteAddr および TLS フィールドに置き換えられました。SetHeader メソッドは Header メソッドに置き換えられ、その結果は Header 型で、Set メソッドなどの他のメソッドを実装します。

net パッケージ は、Dial から laddr 引数を削除し、LookupHost から cname 戻り値を削除しました。実装では、可能な場合は C ライブラリの getaddrinfo(3) 関数を使用してネットワーク名ルックアップを実装するために cgo を使用します。これにより、Go プログラムと C プログラムが同じ方法で名前解決を行い、OS X アプリケーションレベルのファイアウォールも回避されます。

os パッケージ は、簡素化された Open および Create 関数を導入しました。元の Open は、OpenFile として利用可能です。StartProcess の最後の 3 つの引数は、ProcAttr へのポインタに置き換えられました。

reflect パッケージ が再設計されました。Type は、すべての可能な型メソッドを実装するインターフェースになりました。Type t での型スイッチの代わりに、t.Kind() でスイッチします。Value は、すべての可能な値メソッドを実装する struct 値になりました。Value v での型スイッチの代わりに、v.Kind() でスイッチします。TypeOf および NewValue は、TypeOf および ValueOf に名前が変更されました。書き込み可能な Value を作成するには、Zero(t) の代わりに New(t).Elem() を使用します。変更の説明 を参照して、詳細を確認してください。新しい API により、以前の API で必要だった多くのメモリ割り当てを回避する、より効率的な Value の実装が可能になります。

これらのパッケージ API の変更に必要な書き換えの大部分は、gofix が処理することに注意してください。

ツール

Gofix という新しいコマンドが上記で説明されています。

Gotest は、シェルスクリプトではなく、Go プログラムになりました。パッケージ testing の Short 関数と組み合わせて使用される新しい -test.short フラグにより、通常モードまたは「短縮」モードで実行できるテストを作成できます。all.bash はインストール時間を短縮するために短縮モードでテストを実行します。Makefile はこのフラグを認識しています。make testshort を使用してください。

ランタイムサポートは、CPU プロファイリングとメモリプロファイリングを実装するようになりました。Gotest の新しい -test.cpuprofile および -test.memprofile フラグ を使用すると、テストを簡単にプロファイリングできます。Web サーバーにプロファイリングを追加するには、http/pprof のドキュメントを参照してください。その他の使用方法については、runtime/pprof のドキュメントを参照してください。

マイナーな改訂

r57.1 は、http.FormFile の nil ポインタ参照 を修正します。

r57.2 は、goto を誤用するプログラムでの初期化されていないメモリの使用 を修正します。

r56 (2011/03/16 リリース)

r56 リリースは最初の安定版リリースであり、weekly.2011-03-07.1 に対応します。このリリース以前は、現在ウィークリースナップショットと見なされているものがリリースと呼ばれていたため、番号は 56 から始まります。