回答編集履歴
4
注意点追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
メソッド名の先頭が小文字なのはパッケージを超えて参照できないので注意してください。
|
1
|
+
TypeScriptとは違いメソッド名の先頭が小文字なのはパッケージを超えて参照できないので注意してください。(一般にGoでインターフェース定義を書くときは先頭を大文字にする)
|
2
2
|
|
3
3
|
|
4
4
|
|
3
文言修正
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
下記のようにすれば特定のインターフェース
|
17
|
+
下記のようにすれば「ある構造体」が特定のインターフェースを実装済みかどうかをチェックすることができます。
|
18
18
|
|
19
19
|
```go
|
20
20
|
|
2
補足
test
CHANGED
@@ -7,6 +7,8 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
また、インターフェースは逆でメソッドしか記述できずプロパティを扱うことはできません。
|
10
|
+
|
11
|
+
(もしプロパティを扱いたい場合はGetterやSetterを書きます)
|
10
12
|
|
11
13
|
|
12
14
|
|
1
質問の文言に近づけた
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
```go
|
18
18
|
|
19
|
-
type
|
19
|
+
type Notifier interface {
|
20
20
|
|
21
21
|
Notify()
|
22
22
|
|
@@ -24,21 +24,21 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
type
|
27
|
+
type Observer struct{}
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
func (s *
|
31
|
+
func (s *Observer) Notify() {
|
32
32
|
|
33
33
|
}
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
var _ Observer
|
37
|
+
var _ Notifier = (*Observer)(nil) // ここでチェック
|
38
38
|
|
39
39
|
```
|
40
40
|
|
41
|
-
上記では構造体
|
41
|
+
上記では構造体ObserverがNotifyというメソッドを持つことをチェックします。
|
42
42
|
|
43
43
|
|
44
44
|
|
@@ -48,6 +48,6 @@
|
|
48
48
|
|
49
49
|
|
50
50
|
|
51
|
-
* Notifyメソッドをもつオブジェクトを期待する側がインターフェース宣言をする
|
51
|
+
* Notifyメソッドをもつオブジェクトを期待する側がNotifierインターフェース宣言をする
|
52
52
|
|
53
|
-
* 期待する側では
|
53
|
+
* 期待する側ではNotifierインターフェース型を引数に持つのでそれを利用する実装を書いた時点でインターフェースを満たしたかどうかがコンパイル時にチェックされるのでチェックのためだけの記述が不要
|