Go 1 リリース以前のリリース履歴
このページでは、Go 1 より前のGoの安定版リリース間の変更点をまとめたものです。リリース履歴ページで、最近のリリースに関するノートを参照してください。
r60 (2011年9月7日リリース)
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の修正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型になりました。jsonとxmlのクライアントを更新する必要があります。次のように記述されているコード
type T struct { X int "name" }
は次のようにする必要があります。
type T struct { X int `json:"name"` // or `xml:"name"` }
新しい構文を使用する必要があるstructタグを識別するには、govetを使用します。
sortパッケージのIntArray
型はIntSliceに名前が変更され、同様にFloat64SliceとStringSliceも名前が変更されました。
stringsパッケージのSplit
関数は、SplitとSplitNに分割されました。SplitN
は古いSplit
と同じです。新しいSplit
は、最後の引数が-1のSplitN
と同等です。
ツール
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パッケージのSignalとUnixSignal型は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パッケージは、GobEncoderとGobDecoderインターフェースを実装する型の値をエンコードおよびデコードするようになりました。これにより、エクスポートされていないフィールドを持つ型が自己整合的な記述を送信できます。例としては、big.Intとbig.Ratがあります。
http パッケージ が再設計されました。クライアント側では、送信されるヘッダーやリダイレクトの追跡など、HTTP の詳細をより詳細に制御できる新しい Client と Transport 抽象化が導入されました。これらの抽象化により、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 から始まります。