概要 internal packageはgo1.4で追加されたものです。 Goでのアクセス制御は、大文字で始まるものがpublic、小文字で始まるものがprivateの2種類でしたが、 internal packageを使うことによって、package privateにすることができるようになりました。 背景 以下のような問題を解消するために、internal packageは追加されました。 パッケージ外非公開とするために、標準ライブラリ内でコードが重複するケースがあった net/httpを例に上げると、go1.3では、chunked.goという全く同じファイルがnet/httpとnet/http/httputilに2つ存在していました。 ソースコードにも、下記のようなコメントがあったりして残念な感じでした。 // This code is duplicated in net/http