LoginSignup
0
0

More than 1 year has passed since last update.

Go言語 : インターフェース(&循環参照の分離)

Last updated at Posted at 2022-10-02

インターフェース

インターフェイスは、実装と使用を分離することが出来る。
また、Go言語のインターフェースは「循環参照」を解決するためにも使われる。

循環参照

Go言語ではパッケージの循環参照が禁止されている。
循環参照というのは、パッケージAとBがお互いに参照しあってるということ。
循環参照の禁止は、レイヤードアーキテクチャを実現することに寄与する。
しかし、時に、循環参照の禁止は厳しすぎる制約となり、プログラム作成の障害となってしまう。
そこで、インターフェースを用いてパッケージを循環参照から切り離し、循環参照可能な仕組みを作ることもある。

ファイル構造

dog/
  Dog.go
  DogLoar.go
cat/
  Cat.go
  DogInterface.go
main.go

ポイント

Dog.go

func (d *Dog) GetDog() string {  
  cat := &cat.Cat{ CatObj: NewDogRoar() }  
  // GetCat -> DogInterface -> GetDogRoar
  return cat.GetCat()   
} 

※ GetDog関数の中でGetCat関数を呼び出しているが、結果は「Bow Wow !」になる。

出力例

/Go_Interface $ go build
/Go_Interface $ ./Go_Interface
Bow Wow !

GitHub

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0