广州白云区做网站,沙洋县seo优化排名价格,电脑端网站一般做多宽最好,虚拟主机搭建wordpress架构设计#xff0c;有处设计#xff0c;需要将string类型转为instance的实际类型#xff0c;不更改业务代码的前提下#xff0c;修改接口数据 因为涉及到unmarshal#xff0c;因此要先判断instance中的存储的值是否已经是一个指针 如果不是#xff0c;则需要包装为一个指…架构设计有处设计需要将string类型转为instance的实际类型不更改业务代码的前提下修改接口数据 因为涉及到unmarshal因此要先判断instance中的存储的值是否已经是一个指针 如果不是则需要包装为一个指针类型 进行unmarshal最终拿到实际的解析结果 解析完之后再根据最开始是否有过包装行为将区别返回 从而实现架构上0业务代码的侵入
// string-interface
func demo(ctx context.Context, respStr string, instance interface{}) (interface{}, error) {v : reflect.ValueOf(instance)if !v.IsValid() {return nil, errors.New(demo_any_invalid)}if v.Kind() reflect.String {return respStr, nil}dstAny : v.Interface()var needDeref boolif v.Kind() ! reflect.Ptr {ptr : reflect.New(v.Type())dstAny ptr.Interface()needDeref true}if err : jsonx.UnmarshalFromString(respStr, dstAny); err ! nil {return nil, errors.New(demo_unmarshal_fail)}if !needDeref {return dstAny, nil}derefDstAny : reflect.ValueOf(dstAny)if derefDstAny.Kind() ! reflect.Ptr {return nil, errors.New(demo_tmp_any)}return derefDstAny.Elem().Interface(), nil
}