methods.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import "fmt"
  3. type Person struct {
  4. Id int
  5. Name string
  6. }
  7. // не изменит оригинальной структуры, для который вызван
  8. func (p Person) UpdateName(name string) {
  9. p.Name = name
  10. }
  11. // изменяет оригинальную структуру
  12. func (p *Person) SetName(name string) {
  13. p.Name = name
  14. }
  15. type Account struct {
  16. Id int
  17. Name string
  18. Person
  19. }
  20. func (p *Account) SetName(name string) {
  21. p.Name = name
  22. }
  23. type MySlice []int
  24. func (sl *MySlice) Add(val int) {
  25. *sl = append(*sl, val)
  26. }
  27. func (sl *MySlice) Count() int {
  28. return len(*sl)
  29. }
  30. func main() {
  31. // pers := &Person{1, "Vasily"}
  32. pers := new(Person)
  33. pers.SetName("Vasily Romanov")
  34. // (&pers).SetName("Vasily Romanov")
  35. // fmt.Printf("updated person: %#v\n", pers)
  36. var acc Account = Account{
  37. Id: 1,
  38. Name: "rvasily",
  39. Person: Person{
  40. Id: 2,
  41. Name: "Vasily Romanov",
  42. },
  43. }
  44. acc.SetName("romanov.vasily")
  45. acc.Person.SetName("Test")
  46. // fmt.Printf("%#v \n", acc)
  47. sl := MySlice([]int{1, 2})
  48. sl.Add(5)
  49. fmt.Println(sl.Count(), sl)
  50. }