Go_03_結構體的一些筆記
阿新 • • 發佈:2021-08-12
package main import ( "encoding/json" "fmt" "log" "time" ) type User struct { ID int8 `json:"id"` isDelete bool // 通過首字母大小寫控制可見性 CreateTime time.Time `json:"create_time"` UpdateTime time.Time `json:"update_time"` } type Hobby struct { Title string `json:"title"` Desc string `json:"desc"` Level int8 `json:"level"` } // Person 定義結構體 type Person struct { User // 匿名巢狀結構體 Name string `json:"name"` City string `json:"city"` Age int8 `json:"age"` HobbyList []Hobby `json:"hobby_list"` } func (p *Person) SetHobby(hobbyList []Hobby) { // 要先分配記憶體,才能拷貝過來 p.HobbyList = make([]Hobby, len(hobbyList)) copy(p.HobbyList, hobbyList) } // 實現 ToString 方法 值接收者 func (p Person) ToString() string { return fmt.Sprintf("%v", p) } func (p Person) ToJson() string { if result, err := json.Marshal(p); err == nil { return string(result) } return "" } // FromJson 覆蓋原來的值 指標接收者 func (p *Person) FromJson(bytes []byte) { err := json.Unmarshal(bytes, p) if err != nil { log.Println(err) } } // 軟刪除 Delete 指標接收者 func (p *Person) Delete() { p.isDelete = true } // 構造方法 func NewPerson(name, city string, age int8) *Person { return &Person{ Name: name, City: city, Age: age, } } func main() { person := NewPerson("lzh", "上饒", 27) person1 := NewPerson("lzh1", "上饒1", 21) log.Println(person.ToString()) (*person).Delete() log.Println(person.ToJson()) log.Println(person.ToString()) result, _ := json.Marshal(person) log.Println(string(result)) log.Println(person1.ToJson()) person1.FromJson(result) log.Println(person1.ToJson()) hobbyList := []Hobby{ {"羽毛球", "羽毛球", 1}, {"籃球", "籃球", 2}, } person.SetHobby(hobbyList) //person.HobbyList = hobbyList hobbyList[1].Level = 9 log.Println(person.ToJson()) }