Pre-Go 1 リリース履歴
このページでは、Go 1 以前の Go の安定版リリース間の変更点をまとめたものです。最近のリリースに関する注記については、リリース履歴のページをご覧ください。
r60 (2011/09/07 リリース)
r60 リリースは weekly.2011-08-17 に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な要約については、週次リリースノートをご覧ください。完全な情報については、Mercurial 変更リストをご覧ください。
言語
「else」ブロックは、その「else」の本体が別の「if」でない限り、中括弧を必要とするようになりました。gofmt は常にその中括弧を自動的に追加するため、gofmt でフォーマットされたプログラムは影響を受けません。他のプログラムを修正するには、gofmt を実行してください。
パッケージ
パッケージ http の URL 解析およびクエリエスケープコード(ParseURL や URLEscape など)は、新しい url パッケージに移動され、名前がいくつか簡素化されました。クライアントコードは gofix で自動的に更新できます。
パッケージ image では、image.RGBA や image.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 修正、json パッケージの 修正、および新しい 構造体タグオプションが含まれています。
r60.2 は、マップに関連するメモリリークを修正します。
r60.3 は reflect のバグを修正します。
r59 (2011/08/01 リリース)
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 は、複数のパッケージ間で構造体タグを共有できる新しい構造体タグスキームをサポートしています。このスキームでは、タグは次の形式である必要があります
`key:"value" key2:"value2"`
StructField 型の Tag フィールドは、Get メソッドを持つ StructTag 型になりました。json と xml のクライアントは更新する必要があります。次のようなコードは
type T struct {
X int "name"
}
次のように変更する必要があります
type T struct {
X int `json:"name"` // or `xml:"name"`
}
新しい構文を使用するために変更する必要がある構造体タグを特定するには、govet を使用してください。
パッケージ sort の IntArray 型は IntSlice に名前変更され、同様に Float64Slice と StringSlice も変更されました。
パッケージ strings の Split 関数は、Split と SplitN に分割されました。SplitN は古い Split と同じです。新しい Split は、最後の引数が -1 の SplitN と同じです。
ツール
Goinstall は、任意の外部リポジトリ(Google Code、GitHub などだけでなく)からパッケージとコマンドをインストールするようになりました。詳細については、goinstall ドキュメントを参照してください。
r58 (2011/06/29 リリース)
r58 リリースは、追加のバグ修正を含む weekly.2011-06-09 に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な要約については、週次リリースノートをご覧ください。完全な情報については、Mercurial 変更リストをご覧ください。
言語
このリリースは、goto を誤用するプログラムにおける初期化されていないメモリの使用を修正します。
パッケージ
いつものように、gofix が、これらのパッケージ API の変更に必要な書き換えの大部分を処理します。
パッケージ http は、Client.Get メソッドから finalURL の戻り値を削除します。この値は、http.Response の新しい Request フィールドを介して利用できるようになりました。map[string][]string 型のほとんどのインスタンスは、新しい Values 型に置き換えられました。
パッケージ exec は、より便利で簡潔な API で再設計されました。
パッケージ strconv の Quote 関数は、unicode.IsPrint によって印刷可能と分類されない Unicode コードポイントのみをエスケープするようになりました。以前は Quote はすべての非 ASCII 文字をエスケープしていました。これは fmt パッケージの "%q" フォーマットディレクティブにも影響します。以前の引用動作は、strconv の新しい QuoteToASCII 関数を介して引き続き利用できます。
パッケージ os/signal の Signal および UnixSignal 型は、os パッケージに移動されました。
パッケージ image/draw は、exp/draw の新しい名前です。exp/draw からの GUI 関連コードは、exp/gui パッケージに移動されました。
ツール
Goinstall は、Go ツリー外で独自のコードや外部ライブラリをビルドおよびインストールするために(そして Makefiles を書くことを避けるために)、GOPATH 環境変数を遵守するようになりました。
軽微な改訂
r58.1 は、OS X 10.7 Lion で Go を実行できるようにするための ビルドおよび ランタイムの変更を追加します。
r57 (2011/05/03 リリース)
r57 リリースは、追加のバグ修正を含む weekly.2011-04-27 に対応します。このセクションでは、このリリースにおける最も重要な変更点を強調します。より詳細な要約については、週次リリースノートをご覧ください。完全な情報については、Mercurial 変更リストをご覧ください。
新しい gofix ツールは、古い API を使用している Go プログラムを検出し、新しい API を使用するように書き換えます。新しい Go リリースに更新した後、gofix はプログラムに必要な変更を加えるのに役立ちます。Gofix は、以下で説明する http、os、および syscall パッケージの変更を処理し、将来のライブラリへの変更に対応するためにプログラムを更新します。Gofix はすべての状況を完璧に処理できるわけではないため、変更をコミットする前に、その変更を読み、テストしてください。詳細については、gofix のブログ記事を参照してください。
言語
多重代入構文が closed 関数を置き換えます。チャネル受信の構文では、オプションの 2 番目の代入値として、チャネルが閉じられているかどうかを示すブール値が許可されます。このコードは
v := <-ch
if closed(ch) {
// channel is closed
}
次のように書く必要があります
v, ok := <-ch
if !ok {
// channel is closed
}
未使用のローカル変数と同様に、未使用のラベルは違法になりました。
パッケージ
パッケージ gob は、GobEncoder および GobDecoder インターフェースを実装する型の値をエンコードおよびデコードするようになりました。これにより、エクスポートされていないフィールドを持つ型が自己整合的な記述を送信できるようになります。例として、big.Int と big.Rat があります。
パッケージ http は再設計されました。クライアントの場合、送信されるヘッダーや追跡されるリダイレクトなど、HTTP の詳細をより詳細に制御できる新しい Client および 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 は、可能なすべての値メソッドを実装する構造体値になりました。Value v の型スイッチの代わりに、v.Kind() でスイッチします。Typeof と NewValue は、TypeOf と ValueOf と呼ばれるようになりました。書き込み可能な Value を作成するには、Zero(t) の代わりに New(t).Elem() を使用します。詳細については、変更の説明を参照してください。新しい API は、以前の API で必要だった多くの割り当てを回避する、より効率的な Value の実装を可能にします。
gofix が、これらのパッケージ API の変更に必要な書き換えの大部分を処理することを忘れないでください。
ツール
新しいコマンドである Gofix は、上記で説明されています。
Gotest は、シェルスクリプトではなく Go プログラムになりました。新しい -test.short フラグとパッケージ testing の Short 関数を組み合わせることで、通常モードまたは「ショート」モードで実行できるテストを作成できます。all.bash は、インストール時間を短縮するためにショートモードでテストを実行します。Makefiles はフラグを認識しています。make testshort を使用してください。
ランタイムサポートは、CPU およびメモリプロファイリングを実装するようになりました。Gotest の新しい -test.cpuprofile および -test.memprofile フラグを使用すると、テストを簡単にプロファイルできます。ウェブサーバーにプロファイリングを追加するには、http/pprof ドキュメントを参照してください。その他の使用法については、runtime/pprof ドキュメントを参照してください。
軽微な改訂
r57.1 は、http.FormFile の nil ポインタ逆参照を修正します。
r57.2 は、goto を誤用するプログラムにおける初期化されていないメモリの使用を修正します。
r56 (2011/03/16 リリース)
r56 リリースは最初の安定版リリースであり、weekly.2011-03-07.1 に対応します。このリリース以前は、現在週次スナップショットと見なされているものがリリースと呼ばれていたため、番号は 56 から始まります。