47 lines
927 B
Go
47 lines
927 B
Go
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)
|
||
}
|