interface.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. /*
  6. 1. Интерфейс является контрактом определяющим методы,
  7. которым обязан обладать объект и объявляется через type
  8. type Reader interface {
  9. Read(p []byte) (n int, err error)
  10. }
  11. 2. Интерфейс может быть пустым с любым типом и
  12. объявляться через var
  13. var i interface{} = 12
  14. 3. Интерфейс может быть списком разных типов данных
  15. var randomsArray = [5]interface{}{"Hello world", 32, false, 33.22, 'A'}
  16. 4. Интерфейс можно попытаться привести к нужному типу
  17. var i interface{} = 12
  18. v, ok := i.(int); ok
  19. 5. Можно получить тип объекта присвоенного интерфейсу
  20. i.(type)
  21. */
  22. func main() {
  23. // specialPrint(10, 4, 5, 8, 7)
  24. // empty()
  25. do(21)
  26. do("hello")
  27. do(true)
  28. }
  29. func specialPrint(arg ...int) error {
  30. if _, err := fmt.Print(arg); err != nil {
  31. return err
  32. }
  33. return nil
  34. }
  35. func empty() {
  36. var i interface{} = 12
  37. if v, ok := i.(int); ok {
  38. fmt.Println(v + 12)
  39. }
  40. }
  41. func do(i interface{}) {
  42. switch v := i.(type) {
  43. case int:
  44. fmt.Println("Умножим на 2:", v*2)
  45. case string:
  46. fmt.Println(v + " golang")
  47. default:
  48. fmt.Printf("Я не знаю такого типа %T!\n", v)
  49. }
  50. }