需求描述:调用方通过指定结构体某字段(如示例1中的project_id),后端服务基于该字段排序后将结构返回;
难点:后端视角与前端视角不一样,对于指定的字段,不能直接排序
解决方法:
法1:列举法
法2:反射机制
示例1:
// 带json tag的结构体
type Data struct {
ProjectId string `json:"project_id,omitempty"`
ProjectName string `json:"project_name,omitempty"`
}
// 后端视角
type Data struct {
ProjectId string
ProjectName string
}
// 调用方视角
{
"project_id":"123",
"project_name":"test"
}
列举法:
switch json_tag_name {
case "project_id":
// sort
...
}
优点:直接明了
缺点:不灵活,随着结构体成员的增加,case会变多
反射机制:
实现方式1:通过json tag获取对应成员在结构体中的index
objectIndex := -1
projIType := reflect.TypeOf(data[0]).Elem() // 通过反射获取type定义
for