2017-06-03 6 views
1

Goプロジェクトでインターフェイスとその実装を整理するための規約は何ですか?同じパッケージにそれらを維持するので、それが意味をなすGoプロジェクトでインターフェイスとその実装を整理するための規約は何ですか?

src/ 
    my-repo/ 
     solve/ 
      backtracksolve.go 
      permutatesolve.go 
      ... 
      solver.go 

... (some repositories and packages omitted for brevity) ... 

backtracksolvepermutatesolveは、両方のインターフェイスsolverを実装:私は行くと小さなプロジェクトを作成するために新しいです

は、私は現在、このフォルダ構造を持っています例えば、java.utilSet,Map,Listのようなインタフェースを含み、HashSet,HashMapおよびのような実装も含む一般的な規約であるJava/C#からのそのインタフェースのインタフェースおよび他の実装である。。

しかし、両方ともfunc Solve()と両方を実装しているため、package solveにはredeclared exceptionがあります。

各実装(以下)または全く異なるサブディレクトリを作成するのが慣例ですか?

src/ 
    my-repo/ 
     solve/ 
      backtrack/ 
       backtracksolve.go 
      permutation/ 
       permutatesolve.go 

      solver.go 
+1

"Solve()"メソッドを持つ 'BacktrackSolver'と' PermuteSolver'の2つの型を作成したいと思うかもしれません。それは名前の衝突に役立つだろう。 – md2perpe

答えて

1

あなたは、一般的に、あなたのSolverインタフェースを実装するさまざまなタイプを定義し、それらの型にSolve機能を定義します。

func (s *BackTrackSolver) Solve() { … } 
func (s *PermutateSolver) Solve() { … } 

名前の型が異なるため、名前の衝突はありません。 the go playgroundでオンラインで試すことができます。

パッケージのコンベンションに関する質問:良いアプローチは、すべてのコードを1つのパッケージで開始し、実際に呼び出し元に公開するタイプと関数のみをエクスポートすることです。その後、あなたのcode cohesionが落ちたら、コードを複数のパッケージに分割し始めるべきです。

go blogのサブセクション「パッケージに入れるもの」(短く読む)の「Goingコードの整理」の記事もご覧ください。

関連する問題