Open1

Go v1の後方互換性

AkatsukiAkatsuki

Go 1 and the Future of Go Programsによると

Goバージョン1(略してGo 1)のリリースは、言語開発における大きな節目となります。Go 1は、Goで書かれたプログラムやプロジェクトを成長させるための安定したプラットフォームとなります。

Go 1は2つのことを定義しています。1つ目は言語の仕様、2つ目はコアAPIのセット、つまりGoライブラリの「標準パッケージ」の仕様です。Go 1のリリースには、2つのコンパイラスイート(gcおよびgccgo)とコアライブラリ自体の形でそれらの実装が含まれています。

Go 1の仕様に沿って書かれたプログラムは、その仕様の存続期間中、変更されることなく正しくコンパイル、実行され続けることが意図されています。ある不確定な時点でGo 2仕様が策定されるかもしれませんが、それまでは、将来のGo 1の「ポイント」リリース(Go 1.1、Go 1.2など)があっても、現在動作しているGoプログラムは引き続き動作するはずです。

互換性はソースレベルでのものです。コンパイル済みパッケージのバイナリ互換性は、リリース間で保証されていません。ポイントリリースの後は、新しいリリースとリンクするために、Goのソースを再コンパイルする必要があります。

APIは新しいパッケージや機能を獲得して成長する可能性がありますが、既存のGo 1コードを破壊するような方法ではありません。

結論

Go v1ならソースコードレベルでの互換性は担保される(バイナリレベルでは担保されない 呼び出し規約が変わるとかかな?)

つまりプログラマがGoのバージョンをあげたことで既存のGoコードが動かなくなることは基本的にない

ただしセキュリティなどごく稀な例外が生じた場合は互換性が担保されないときもある