Dmitry Telenkov 3 tuần trước cách đây
mục cha
commit
dc4e64611c

+ 61 - 0
courses/golang_web/1_data_type/method_old.go

@@ -0,0 +1,61 @@
+package main
+
+import (
+	"fmt"
+)
+
+type Person struct {
+	Id   int
+	Name string
+}
+
+// не изменяет оригинальной структуры, для которой вызван
+func (p Person) UpdateName(name string) {
+	p.Name = name
+}
+
+// изменяет оригинальную структуру
+func (p *Person) SetName(name string) {
+	p.Name = name
+}
+
+type Account struct {
+	Id   int
+	Name string
+	Person
+}
+
+type MySlice []int
+
+func (sl *MySlice) Add(val int) {
+	*sl = append(*sl, val)
+}
+
+func (sl *MySlice) Count() int {
+	return len(*sl)
+}
+
+func main() {
+	/*
+		pers := Person{1, "Vasily"}
+		fmt.Println(pers.Name)
+		pers.SetName("Vasily Romanov")
+		fmt.Println(pers.Name)
+	*/
+	var acc Account = Account{
+		Id:   1,
+		Name: "rvasily",
+		Person: Person{
+			Id:   2,
+			Name: "Vasily Romanov",
+		},
+	}
+
+	acc.SetName("romanov.vasily")
+	fmt.Println(acc.Name)
+	fmt.Println(acc.Person.Name)
+
+	sl := MySlice([]int{1, 2})
+	sl.Add(3)
+	fmt.Println(sl.Count(), sl)
+}

+ 36 - 0
courses/golang_web/1_data_type/struct_my.go

@@ -0,0 +1,36 @@
+package main
+
+import "fmt"
+
+type Person struct {
+	Id      int
+	Name    string
+	Address string
+}
+
+type Account struct {
+	Id      int
+	Name    string
+	Cleaner func(string) string
+	Owner   Person
+	Person  // все поля Person будут полями Account
+}
+
+func main() {
+	// полное объявление структуры
+	var acc Account = Account{
+		Id:   1,
+		Name: "rvasily",
+		Person: Person{
+			Address: "Москва",
+		},
+	}
+	// fmt.Printf("%#v\n", acc)
+
+	// короткое объявление структуры. Нужно указать все поля
+	acc.Owner = Person{2, "Romanov Vasiliy", "Moscow"}
+
+	// fmt.Printf("%#v\n", acc)
+
+	fmt.Println(acc.Address)
+}