zoukankan      html  css  js  c++  java
  • Go_03_结构体的一些笔记

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    	"sync"
    	"time"
    )
    
    var (
    	once      sync.Once
    	_instance *Person
    )
    
    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"`
    }
    
    // GetInstance 原子操作实现线程安全的单例
    func GetInstance() *Person {
    	once.Do(func() {
    		_instance = new(Person)
    	})
    	return _instance
    }
    
    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())
    
    	p2 := new(Person)
    	p2.Age = 9
    	log.Println(p2.HobbyList)
    	nums := 10
    	for nums > 0 {
    		go func() {
    			p := GetInstance()
    			log.Printf("%p", p)
    		}()
    		nums--
    	}
    	time.Sleep(1 * time.Second)
    }
    
    
  • 相关阅读:
    xml文档格式学习笔记
    Visual Studio学习记录
    Java学习笔记
    C#项目学习记录
    Linux命令行与shell脚本编程大全 学习笔记
    NodeJS (npm) 学习笔记
    Angular学习笔记
    TypeScript学习笔记
    java 项目相关 学习记录
    docker学习记录
  • 原文地址:https://www.cnblogs.com/carp-li/p/15132266.html
Copyright © 2011-2022 走看看