struct.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import "fmt"
  3. type Person struct {
  4. Id int
  5. Name string
  6. Address string
  7. }
  8. type Account struct {
  9. Id int
  10. Name string
  11. Cleaner func(string) string
  12. Owner Person
  13. Person
  14. }
  15. func main() {
  16. // foo1()
  17. foo2()
  18. }
  19. func foo1() {
  20. // полное объявление структуры
  21. var acc Account = Account{
  22. Id: 1,
  23. Name: "rvasily",
  24. Person: Person{
  25. Address: "Москва",
  26. },
  27. }
  28. // fmt.Printf("%#v\n", acc)
  29. // короткое объявление структуры
  30. acc.Owner = Person{2, "Romanov Vasily", "Moscow"}
  31. // fmt.Printf("%#v", acc)
  32. fmt.Println(acc.Address)
  33. }
  34. // методы структур
  35. // не изменяет оригинальной структуры, для который вызван
  36. // нет смысла
  37. func (p Person) UpdateName(name string) {
  38. p.Name = name
  39. }
  40. // изменяет оригинальную структура
  41. func (p *Person) SetName(name string) {
  42. p.Name = name
  43. }
  44. func foo2() {
  45. pers := Person{1, "Vasily", "Moscow"}
  46. pers.SetName("Vasily Romanov")
  47. fmt.Printf("updated person: %#v\n", pers)
  48. }