Go一周年ということで久しぶりに最新版にしたところ、コンパイルエラーが発生したのでその原因を探してみた。結果、いくつか仕様に変更があったことが判明。自分に影響があったのは以下の2つ。
- 2010-10-13のリリースでインターフェースへのポインタが自動的に参照されなくなった
- 2010-10-20のリリースでlogパッケージのインターフェースが変更になった
インターフェースへのポインタの扱いが変更
リリースノートの該当箇所は以下。
The language change is that uses of pointers to interface values no longer automatically dereference the pointer. A pointer to an interface value is more often a beginner’s bug than correct code.
ようするにインタフェースのポインタとか使うなよ!という変更点。自分のコードでは次のように変える必要があった。ちなみに変更前のコードではconn.Closeでコンパイルエラー(undefinedエラー)が起きてた。
変更前
func communicate(conn *net.Conn) {
defer func() {
conn.Close()
}()
(以下略)
変更後
func communicate(conn net.Conn) {
defer func() {
conn.Close()
}()
(以下略)
logパッケージのインタフェースが変更
個人的に結構影響のあった変更。関数名やらが変わったので色々置換する必要があった。変更前
var logger *log.Logger = log.New(os.Stdout, nil , "", log.Lok)
logger.Log("Error")
変更後
var logger *log.Logger = log.New(os.Stdout, "", 0)
logger.Print("Error")
0 件のコメント:
コメントを投稿