范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Go开发中结构体modeldtotime格式问题

  1、背景
  model层不允许使用 json, dto层又重复造轮子,一个表的字段可能20个左右,那么赋值语句难受死了。
  其次就是json直接解析,model层的time.Time,完蛋格式不对,返回的数据不对。
  比如 {     "user_name": "xiaoli",     "create_time": "2020-06-05T13:53:06.293614+08:00" }
  这种情况,无法解决,就需要必须重写一个dto。
  那么如何解决这个问题呢,本人思考了一段时间,最终使用Map来解决。 2、解决问题1、反射
  那么反射会遇到,各种奇葩的书写方式,有些人什么都出传入指针,有些人各种interface{} 隐藏转换,反正就是太过于差异化。
  所以就是需要解决,如何准确的拿到Value对象,下面是我写的一个工具类 func GetRealValue(value reflect.Value) reflect.Value {     kind := value.Kind()     if kind == reflect.Ptr {         return GetRealValue(value.Elem())     }     if kind == reflect.Interface {         // eg:var s2 interface{}         //  s2 = User{}         //  fmt.Println(reflect.ValueOf(&s2).Elem().Kind())// interface         // 所以这里需要将它转换         if value.CanInterface() {             return GetRealValue(reflect.ValueOf(value.Interface()))         }         return GetRealValue(value.Elem())     }     return value }
  解决这个问题,开干 2、下划线命名法
  下划线如何解决,结构体的字段属于驼峰命名法,怎么解决呢?
  写了一个简单的工具类
  问题:1、如果是 ID  ,连续大写,输出i_d
  2、因为数组到切片需要拷贝一次,所以可以利用unsafe解决,因为字符串底层就是切片,但是不安全 func CamelCase(s string) string {     if s == "" {         return ""     }     t := make([]byte, 0, 32)     i := 0     for ; i < len(s); i++ {         c := s[i]         if isASCIIDigit(c) {             t = append(t, c)             continue         }         if isASCIIUpper(c) {             c ^= " "         }         t = append(t, c)         for i+1 < len(s) && isASCIIUpper(s[i+1]) {             i++             t = append(t, "_", s[i]+32)         }     }     //return *(*string)(unsafe.Pointer(&t))     return string(t) } func isASCIIUpper(c byte) bool {     return "A" <= c && c <= "Z" }  func isASCIIDigit(c byte) bool {     return "0" <= c && c <= "9" }3、开干
  1、解决time的问题
  2、反射、下划线命名法 func ToStdMap(bean interface{}) map[string]interface{} {     _value := GetRealValue(reflect.ValueOf(bean))     if _value.Kind() != reflect.Struct {         panic("the bean mush struct")     }     _type := _value.Type()     fieldNum := _value.NumField()     _map := make(map[string]interface{}, fieldNum)     for x := 0; x < fieldNum; x++ {         field := _type.Field(x)         value := GetRealValue(_value.Field(x))         if value.CanInterface() {             realValue := value.Interface()             switch realValue.(type) {             case time.Time:                 _map[CamelCase(field.Name)] = times.FormatStdTime(realValue.(time.Time))             default:                 _map[CamelCase(field.Name)] = realValue             }         }     }     return _map }4、测试func TestObjToMap(t *testing.T) {     users := Users{         UserName: "xiaoli",     }     now := time.Now()     users.CreateTime = &now     stdMap := ToStdMap(users)     bytes, err := json.Marshal(stdMap)     if err != nil {         t.Fatal(err)     }     fmt.Printf("%s ", bytes) }
  输出结果:
  完美,美中不足是需要使用likedMap,由于Golang源码包没有,所以,注定乱序 {"create_time":"2020-06-05 14:05:31","user_name":"xiaoli"}

华为南非总经理已在南直接创造超800个就业岗位,间接创造7万多个就业岗位中国驻南非大使馆网站4月14日消息,4月14日,由南非中国经贸协会举办的2022年中资企业招聘大会在约翰内斯堡成功举行。驻南非大使陈晓东应邀出席并致辞,南非总统特别代表就业和劳动部微信出手!这类行为,严厉打击近日,微信安全中心发布关于治理微信个人账号恶意营销行为的公告,全文如下一直以来,微信始终保持对违法违规行为严厉打击的态度,努力为用户营造一个安全绿色的使用环境。近期,通过用户投诉,燃油时代的日系霸主,砸2500亿转型电动车在席卷全球的电动化浪潮中,日系车企本是最不积极的一方。固守氢能路线,在电动化转型上投入的迟疑,让日系车企无论是技术还是销量,都远逊于其他电动车厂商。如今,随着特斯拉的全球爆火,新能不再苦等充电桩,增程式电动汽车打破续航焦虑清明假期刚刚过去不久,选择自驾出行的各位,有没有碰到被困高速的新能源车主?网上一段关于清明节高速充电站的视频上,可以看到等着充电的车辆排着长长的队伍,一眼看不到头。即使没有,但凡关小鹏汽车CEO何小鹏称,5月份国内车企或全部停产?日前,笔者从相关渠道了解到,小鹏汽车CEO何小鹏称,如果上海和周边的供应链企业还无法找到动态复工复产的方式,五月份可能中国所有的整车厂都要停工停产了。目前蔚来汽车已经宣布停工,并且新能源汽车补贴退坡是什么意思新能源汽车补贴退坡的意思是在提供补贴的同时,根据新能源汽车发展,有计划有明确目标的逐步减少补贴,和早期的扶上马,送一程的说法比较起来,有明确的时间节点和额度限制。进入2015年,我计算机行业动态国产EDA有望加速发展据彭博社,美国EDA(Electronicdesignautomation,电子设计自动化)软件公司新思科技(SNPSUS)因涉嫌向受到制裁的中国公司转让关键技术正在接受美国商务部有哪些石破天惊的神级歌词?看了好几位的回答真的是失望至极,大师级别的作词作曲居然一个都没有被提到,没办法理解石破惊天是个什么意思,不过说起歌词这回事例举几位大师级别的人物第一位江湖词黄霑,这哥们绝对词作者里高管大震荡,阿里云四面楚歌作者童思思编辑胡展嘉出品零态LT(IDLingTaiLT)内部确实没有对这次事件(阿里云高管变动)的口径,官方没有公开任何信息。关于这次高管变动消息,阿里云内部人士这样告诉零态LT第八天Python的re库文本操作,如今是最常使用的功能。re是Python内置的库。通过re和正则表达式,我们可以查找,替换字符串。match对象re库有一个常用对象,match。很多re函数会返回它。先德国或提前取消插电式混动车补贴来源盖世汽车星云据外媒报道,据一位知情人士透露,德国经济部希望在今年年底提前结束针对插电式混合动力汽车的补贴,并从2023年起,将针对电动汽车的现金补贴减少三分之一。这位不愿透露身
苏宁易购818悟空榜品牌赛点到来小米华为胶着对抗8月15日,苏宁易购818全面爆发,各大品牌之间的较量也进入贴身肉搏期。8月16日榜单数据显示,数码3C领域比较强势的品牌当属小米华为,两家品牌在耳机与穿戴领域双雄争霸智能家居领域进口品牌净水器十大排名近年来,对于水质的好坏是很多人都关心的一件事,对于这个问题大家从来没有松懈过,针对一些领域的治理管控有了很大的改善,但可惜的是还有有部分没有达到国家标准。那么针对这些问题很多人都是国产手机系统做的最好的,最好用的是哪一品牌?国内的手机厂商,几乎都在手机系统上对Android系统进行了自我开发和创新,目前国内比较出名的就是MIUIFlymeEMUISmartisanOS和一加的氢OS。这些操作系统,虽然抛开性价比,小米这个品牌到底好在哪儿?现在我家属用的还是红米手机,这个手机有三年了,是我在公司年会上抽奖中的,那时价格是一千多,用了几年,感觉还不错。手机只要不是对某些方面有特殊要求,比如打游戏,拍照,我认为小米手机包我试过最好的助听器,但是仍然听得不能像正常耳朵一样,我该怎么办?在选配助听器的过程中,会有这样一些听力障碍者,他们对助听器的期望值过高,认为助听器戴上之后可以马上恢复到正常人的听力,其实这是一种误区,这往往会影响到听障者对助听器的适应和正常使用邮小铺创新型驿站便利店,与传统便利店有什么不一样?随着消费升级,经济快速发展,便利店市场自2016年起就一路高歌猛进,新型便利店跑马圈地,在经济暂未退热之时,菜鸟驿站饿了么外卖朴朴到家进入大众视野,受国内线上零售的蓬勃发展以及消费消息称一大波骁龙895898新手机备案IT之家8月16日消息此前消息称,高通正在开发一款代号为SM8450Waipio的芯片,将作为骁龙888(SM8350)的继任者。此前爆料称,骁龙895898采用台积电4nm工艺,一年研发投入98。5亿,联想不排除自研芯片,3年内投入翻倍华为和联想这两家中国企业,在大家的日常谈论中一直被放在一起作比较,就像家中的两个孩子,家长总想分出优劣,其中最大的原因就是联想和华为在发展道路上的分歧。如今,杨元庆宣布,也要步入和荣耀10x和,荣耀30怎么选,哪款拍照好?感谢邀请,关注我了解更多手机。荣耀10X和荣耀30都是目前荣耀目前非常畅销的机型,两款手机拍照对比的话,毫无疑问荣耀30拍照体验更好,拥有潜望式长焦焦镜头,而且支持功能更加丰富一些美团字节跳动拼多多滴滴,它们的共同点是什么?1都是平台公司,说得好听点,都是新业态科技公司电商公司说得不好听点,都是做无本买卖的,都是牵线搭桥做渠道生意的,跟原先的二道贩子没什么区别,只不过是速度更快顾客更多手段更先进覆盖面在全国又在防范新冠病毒的大环境下,行程码真的有效吗?有效的!出行码记录去过的城市有两种方式!第一种是由手机三大运营商根据基站自动记录的!一般在城市停留四个小时就会被运营商记录下来!运营商在每个城市都有基站!这样你到了哪个城市,使用了