package learning import ( "fmt" "math" ) // Объявляем интерфейс I с сигнатурой метода M() type I interface { M() } // Объявляем структуру T с атрибутом S type T struct { S string } // Имплементируем метод интерфейса M() для структуры T func (t *T) M() { fmt.Println(t.S) } // Объявляем тип F type F float64 // Имплементируем метод интерфейса M() для типа F func (f F) M() { fmt.Println(f) } func InterfaceLearningTwo() { // Объявляем переменную i типа I (интерфейс) var i I // Присваиваем переменной i экземпляр струтуры T, у которой S = "Hello" i = &T{"Hello"} describe(i) i.M() i = F(math.Pi) describe(i) i.M() } func describe(i I) { fmt.Printf("(%v, %T)\n", i, i) }