1.结构体struct

看这个文章,看一个struct

1.1 声明结构体

// student
type Student struct {
    Name string
    Age  uint64
}

// class
type Class struct {
    ClassNo       uint64
    ClassName     string
    Students      []Student //数组
    IsHonor       bool
}

1.2 初始化结构体 以及 传参

    // 初始化结构体的方法一:
    class := Class{
    	ClassNo:  302
        ClassName:	"三年级二班",
        Students:    students, // students变量
        IsHonor:    false,
    }
    key, err := t.Get(class) //普通
    func (s *SService) Get(class Class){  //普通
    }
    
    // 初始化结构体的方法二: 取地址
    class := &Class{
    	ClassNo:  302
        ClassName:	"三年级二班",
        Students:    students, // students变量
        IsHonor:    false,
    }
    key, err := t.Get(class) // 传的是个”地址“
    func (s *SService) Get(class *Class){ // 用”指针“接
    } 
    
	// 初始化结构体的方法三:
	class := Class{}
	class.ClassNo = 302
	class.ClassName = "三年级二班"
	class.Students = students
	class.IsHonor = false
2. 结构体数组、append
	var classOne Class
	var classList []Class
	for ....:取到值先赋给classOne,再用classList = append(classList, classOne)
3. 接口返回 含数组的结构体 常用写法
type RespData struct {
	Name  string `json:"name"`
	Age uint64 `json:"age"`
}

type JiekouResponse struct { 
	List []RespData `json:"list"` 
}

func (t *TController) SuggestGet(){
	res := &JiekouResponse{}
	res.List = []RespData{} // 定义数组
	
	
	s := service.NewTService(t.param)
	allData := s.GetAllData()
	
	var dataOne RespData
	for _, data := range allData { // 循环赋值
		dataOne.Name = data.Name
		dataOne.Age = data.Age
		res.List = append(res.List, dataOne) // 数组append给值
	}
}

json string转struct

type UserInfo struct {
	ParentNodeId  int64  `json:"parent_node_id"`
	NodeTypeId    uint32 `json:"node_type_id"`
	DimeNodeValue string `json:"dime_node_value"`
	CnName        string `json:"cn_name"`
	EnName        string `json:en_name"`
}

// 解析userInfolist:从json string到struct
	userinfoStr := req.Userinfolist // req.Userinfolist是个list,list里是非常多的json string [{"a":1,"b":2,"c":"3"},{},...]
	var userInfolist []*UserInfo
	if userinfoStr != "" {
		err := json.Unmarshal([]byte(userinfoStr), &userInfolist)
		fmt.Println("userInfolist:", userInfolist)
		fmt.Println(userInfolist[0].DimeNodeValue)
		if err != nil {
			return res, err
		}
	}