私が見たほとんどのGoプログラムでは、パッケージが1つしかないものでも、型名には大文字が書き込まれ、書き出されます。 (例)Goでは、型名を大文字にする規則がありますか?
これはタイプであることを明確にするための規約ですか、すべてのタイプをエクスポートする必要がありますか?ここで
は、いくつかの例は以下のとおりです。
私が見たほとんどのGoプログラムでは、パッケージが1つしかないものでも、型名には大文字が書き込まれ、書き出されます。 (例)Goでは、型名を大文字にする規則がありますか?
これはタイプであることを明確にするための規約ですか、すべてのタイプをエクスポートする必要がありますか?ここで
は、いくつかの例は以下のとおりです。
タイププライベートにすることができます。
ただし、プライベートタイプを返すパブリック関数を使用することはできません。タイプが内部でのみ使用されるパッケージである限り、私はそれを非公開にします。
EDIT: この例では、パブリック関数によって返され、パッケージの外で使用されるため、サーバーはパブリックである必要があります。 NewServer関数は* Serverを返します。
EDIT for new example:
新しい例では、これはメインパッケージです。とにかくそれをインポートすることはできません。
大文字で始まるタイプは、他のパッケージにエクスポートされます。小文字で始まるものは、パッケージ内でのみ使用できます。重要な注意:インターフェイスを実装する構造体をエクスポートせずにインターフェイスをエクスポートすることは可能です。
タイプをエクスポートすることはできません。それらをパッケージ外で使用できるようにする場合にのみエクスポートしてください。指定した例では、エクスポートされたフィールドがないため、Server
タイプをエクスポートする必要はありませんでした。
クライアントとの契約の一部であるタイプのみをエクスポートします。内部的にのみ使用されるタイプのエクスポートは間違いであり、ドキュメントでは混乱します。
編集:
Server
タイプについて少し明確化。 http.Handler
インターフェイス(ServeHTTP(http.ResponseWriter, *http.Request)
を定義する必要があります)を実装しているため、エクスポートしないで、インターフェイスを戻りタイプNewServer
として使用することは可能です。
慣例ではありません。実際には、大文字と小文字を使用して、エクスポートされたもの、つまりパッケージをインポートするときに使用できるものを判断します。
など。私が持っている場合:
package a
const Exported = "hi"
const nonExported = "mom"
を次に別のパッケージに、あなたはa.Exported
なくa.nonExported
をインポートすることができます。
package main
import "PATH/a"
func main() {
println(a.Exported)
// this won't compile
// println(a.nonExported)
}
私はそれがそれらを輸出することを知っている、私は実際に(私は2回)私の質問でそれを書いた。私はなぜそれらのすべてのタイプがその型をエクスポートするのか知りたい。 – AndreKR
エクスポートされるすべてのタイプの必要がありません。大会ではありません。機能上の理由から、パッケージ内の識別子の名前の大文字小文字が選択されます。 – evanmcdonnal
主要なパッケージタイプを大文字で書いている人もあれば、そうでない人もいます。タイプをエクスポートする必要がない場合、他の理由はありません。 – JimB