値の型と参照の型の間のインターフェイスの充足可能性がわかりにくいです。私はまだそれがゴランでどのように機能するか把握できません。リファレンスタイプを満足しないインターフェイスに割り当てることができる理由[golang]
type Counter1 int
type Counter2 int
func (c Counter1) String() string {
}
func (c *Counter2) String() string {
}
func main() {
var c1 Counter1
var c2 Counter2
var i1 fmt.Stringer = &c1 // assignment 1
var i2 fmt.Stringer = c2 // assignment 2
}
ただし、割り当て1は機能しますが割り当て2は機能しません。私はそれらのどれも動作しないことを期待していました。タイプCounter1はfmt.Stringerを満たしますが、タイプ* Counter1は満たされません。したがって、& c1はi1に割り当てることはできません。タイプCounter2はfmt.Stringerを満たしませんが、タイプ* Counter2があります。したがって、c2はi2に代入することはできません。このテストプログラムの結果は私には意味がありません。私はコンパイラが参照型と値型の間で自動的に変換する、ある種の構文砂糖かもしれないと思った。しかし、次のテストコードは、私をもっと混乱させてしまいます。* Counter1型もCounter1型もinterface Testを満たしていません。しかし、最初と2番目の割り当てはまだ動作します。それは私には意味がありません。囲碁、セレクタ式(x.f
)において