看这个文章,看一个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
}
}