LoginSignup
0
0

【Go言語】インターフェースが実装されているか調べる方法

Posted at

Goにはimplementsがない

他の言語であればインターフェースを実装するときはimplementsなどのように明示して実装します。

phpであればこのようにインターフェスを実装するときはimplementsを使います。

<?php

// インターフェイス 'Template' を宣言する
interface Template
{
    public function setVariable($name, $var);
    public function getHtml($template);
}

// インターフェイスを実装する。
class WorkingTemplate implements Template
{
    private $vars = [];
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

しかしGo言語にはこれがないので、実装されているかいないかがわかりません。
ただ、実装されているか調べることができます。

実装されているか調べる

以下のようにインターフェースがあるとします。

type Animal interface {
	MakeSound() string
}

type Cat struct{}

func (c Cat) MakeSound() string {
	return "Meow"
}

type Lion struct{}

CatはAnimalを実装しており、Lionは実装していません。
このとき以下のコードを入力すると下のコードはコンパイラエラーになります。

var _ Animal = Cat{}
var _ Animal = Lion{} // エラー

これはLionをAnimal型の変数には代入できない、すなわち実装していないため代入できないからです。
そのためこのコードを利用すれば実装しているか実装していないかをエラーで確認することができます。

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