| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package main
- import (
- "fmt"
- )
- /*
- 1. Интерфейс является контрактом определяющим методы,
- которым обязан обладать объект и объявляется через type
- type Reader interface {
- Read(p []byte) (n int, err error)
- }
- 2. Интерфейс может быть пустым с любым типом и
- объявляться через var
- var i interface{} = 12
- 3. Интерфейс может быть списком разных типов данных
- var randomsArray = [5]interface{}{"Hello world", 32, false, 33.22, 'A'}
- 4. Интерфейс можно попытаться привести к нужному типу
- var i interface{} = 12
- v, ok := i.(int); ok
- 5. Можно получить тип объекта присвоенного интерфейсу
- i.(type)
- */
- func main() {
- // specialPrint(10, 4, 5, 8, 7)
- // empty()
- do(21)
- do("hello")
- do(true)
- }
- func specialPrint(arg ...int) error {
- if _, err := fmt.Print(arg); err != nil {
- return err
- }
- return nil
- }
- func empty() {
- var i interface{} = 12
- if v, ok := i.(int); ok {
- fmt.Println(v + 12)
- }
- }
- func do(i interface{}) {
- switch v := i.(type) {
- case int:
- fmt.Println("Умножим на 2:", v*2)
- case string:
- fmt.Println(v + " golang")
- default:
- fmt.Printf("Я не знаю такого типа %T!\n", v)
- }
- }
|