2017-09-07 5 views
2

私はCとC++のバックグラウンドからゴランが意味的に異なっているので、関数名 "New"と "Open"について、またフードの下で何が起こるべきかについて、 。 New関数がファイル記述子を一時ファイルに開くパッケージを作成しました。 Goで書かれたAPIの動作が意図されているかどうかはわかりません。ここで新しい関数がゴランにファイル記述子を割り当てます

は抜粋です:

// Not directly convenient New allocates file descriptors 
deb := New() 
deb.AddFile("/tmp/myfile") 
deb.Write("/tmp/mypackage.deb") 
deb.Close() 

// Idiomatic it opens file descriptors but we have to provide context to open 
info := &Props{Name: "mypackage"} 
deb := info.Open("/tmp/mypackage.deb") 
deb.AddFile("/tmp/myfile") 
deb.Close() 

答えて

2

ゴーのコミュニティは、まだそのイディオムやパターンを見つけることですので、何の教義を考慮していません。私が1年半で見たものに基づいて、行動を説明するgodocコメントがあれば、New関数でディスクに触れるのは間違っているとは思わない。 になります。おそらくd.Write()のディスクに触れるほうが理にかなっています。 d := deb.New(...)(変数を持っているので:私はNew機能を見てきたいくつかの一般的なパターン:パッケージ名接頭辞を持つ他のパッケージから呼び出されたとき

  • 他のパッケージ
  • で使用するために設計された場合にのみエクスポートされるには、理にかなっています
  • debという名前の、あなたのパッケージが何か他のものであること、さらに
  • を使用するために、パッケージの主要なビジネス・ロジックのインスタンスを返します(うまくいけば任意の行動の依存関係はインターフェイスです代わりに、独自の依存関係を構築するの引数として依存関係を受け入れる)
  • しばしばmain()機能は、それらの依存関係を組み立てd := deb.New(deps)を呼び出し、インターフェース使用例署名d.AddFile(); d.Write(); d.Close()

動作を実行:

package deb 

// New accepts blah returning a *Deb. It returns nil if blah. 
func New(name string, to io.WriteCloser) *Deb {...} 
関連する問題