卷!一个字形容了当今码农行业的现状。一层一层的代码结构,一个一个dto,entity,vo,req,resp。这些对象越来越多,让码农们非常劳于奔命,加一个字段,改一个字段,影响面有多少。代码量也越来越大。有可能一个代码,要建10多个数据对象。这虽然有点夸张,但体现了行业的乱象。

我是曾经写php代码的研发,由于php的并发能力的不足,和编译检错能力不足,导致行业用php越来越少了。但是不得不说,在php的时代,跟本不需要这么多对象,因为有一个强大的array,包罗万象。难度我们go、java都不能也通过这种方式实现吗?

Allright,  由此,MagicArray就诞生了,不用关心类型,不用关心空指针,不用创建哪么多数据对象,轻松数据转换。废话不多说,上代码:

DTO替代方式:

package main

import (
"encoding/json"
"fmt"
arr "github.com/lingdor/magicarray"
"time"
) type UserDTO struct {
Id int `json:"userid"`
Name string
} type ScoreDTO struct {
Score int
ScoreTime time.Time
} type AreaDto struct {
CityId int
City string
} func dtosCommand() { user := UserDTO{
Id: 1,
Name: "bobby",
}
score := ScoreDTO{
Score: 66,
ScoreTime: time.Now(),
}
area := AreaDto{
CityId: 10000,
City: "newyork",
} mix, _ := arr.Merge(arr.ValueofStruct(user), score, area)
mix = arr.Gets(mix, "Id", "City", "Score")
if bs, err := json.Marshal(mix); err == nil {
fmt.Println(string(bs))
} else {
panic(err)
} }

输出

{"userid":1,"City":"newyork","Score":66}

数据变换

package main

import (
"encoding/json"
"fmt"
arr "github.com/lingdor/magicarray"
) type ColumnUserEntity struct {
Id int `json:"uid"`
UserName string
IsMale bool
} func columnCommand() { users := []ColumnUserEntity{
{
Id: 1,
UserName: "Bobby",
IsMale: true,
},
{
Id: 2,
UserName: "Lily",
IsMale: false,
},
} usersArr := arr.ValueOfSlice(users)
usersArr = arr.WashColumnTag(usersArr, arr.WashTagJsonInitalLowerOpt())
if bs, err := json.Marshal(usersArr); err == nil {
fmt.Println(string(bs))
} else {
panic(err)
} usersArr = arr.Column(usersArr, "UserName")
if bs, err := json.Marshal(usersArr); err == nil {
fmt.Println(string(bs))
} else {
panic(err)
} }

输出

["Bobby","Lily"]

tag操作

package main

import (
"encoding/json"
"fmt"
arr "github.com/lingdor/magicarray"
) type UserEntity struct {
Id int `json:"uid"`
UserName string
IsMale bool
} func tagCommand() { users := []UserEntity{
{
Id: 1,
UserName: "Bobby",
IsMale: true,
},
{
Id: 2,
UserName: "Lily",
IsMale: false,
},
} usersArr := arr.ValueOfSlice(users)
usersArr = arr.WashColumnTag(usersArr, arr.WashTagJsonInitalLowerOpt())
if bs, err := json.Marshal(usersArr); err == nil {
fmt.Println(string(bs))
} else {
panic(err)
} }

输出

[
{"uid":1,"userName":"Bobby","isMale":true},
{"uid":2,"userName":"Lily","isMale":false}
]

参考:https://lingdor.medium.com/magicarray-use-to-data-translate-easily-8831b937bfc1

MagicArray:像php一样,让Go业务代码不再卷!的更多相关文章

  1. Magicodes.WeiChat——ASP.NET Scaffolding生成增删改查、分页、搜索、删除确认、批量操作、批量删除等业务代码

    关于T4代码生成这块,我之前写过几篇帖子,如:<Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)>(http://www.cnblogs.co ...

  2. JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码

    本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍) ...

  3. 唱吧DevOps的落地,微服务CI/CD的范本技术解读----最大的难点并不是实际业务代码的编写,而是服务的监控和调试以及容器的编排

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  4. golang写业务代码,用全局函数还是成员函数

    在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...

  5. 朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑

    我承认,本文的标题有一点标题党,特别是写业务代码,大家因为没有足够重视一些细节最容易调的坑(侧重Java,当然,本文说的这些点很多是不限制于语言的). 1.客户端的使用 我们在使用Redis.Elas ...

  6. 朱晔的互联网架构实践心得S2E1:业务代码究竟难不难写?

    注意,这是我的架构实践心得的第二季的系列文章,第一季有10篇你也可以回顾. 见https://www.cnblogs.com/lovecindywang/category/1296779.html 最 ...

  7. Serverless架构详解:开发者如何专注于业务代码本身?

    本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 演讲嘉宾:黄文俊,曾负责企业级存储.企业级容器平台等产品的架构与开发,目前主要负责SCF腾讯无服务器云函数产品相关. ...

  8. 使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码 (jvm性能调优)

    技术交流群:233513714 本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 ...

  9. CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》

    [程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...

  10. 策略模式+注解 干掉业务代码中冗余的if else...

    前言: 之前写过一个工作中常见升级模式-策略模式 的文章,里面讲了具体是怎样使用策略模式去抽象现实中的业务代码,今天来拿出实际代码来写个demo,这里做个整理来加深自己对策略模式的理解.   一.业务 ...

随机推荐

  1. 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理

    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第3篇, 主要总结和记录了如何 ...

  2. html页面底部添加版权信息

    话不多说,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  3. 618京东到家APP-门详页反爬实战

    一.背景与系统安全需求分析 1. 系统的重要性 上图所示是接口所属位置.对电商平台或在线商店而言,分类查商品都是很重要的,通过为用户提供清晰的商品分类,帮助他们快速找到所需产品,节省浏览时间,提升购物 ...

  4. 逻辑漏洞挖掘之XSS漏洞原理分析及实战演练

    一.前言 2月份的1.2亿条用户地址信息泄露再次给各大公司敲响了警钟,数据安全的重要性愈加凸显,这也更加坚定了我们推行安全测试常态化的决心.随着测试组安全测试常态化的推进,有更多的同事对逻辑漏洞产生了 ...

  5. angular + express 实现websocket通信

    最近需要实现一个功能,后端通过TCP协议连接雷达硬件的控制器,前端通过websocket连接后端,当控制器触发消息的时候,把信息通知给所以前端: 第一个思路是单独写一个后端服务用来实现websocke ...

  6. GO数组解密:从基础到高阶全解

    在本文中,我们深入探讨了Go语言中数组的各个方面.从基础概念.常规操作,到高级技巧和特殊操作,我们通过清晰的解释和具体的Go代码示例为读者提供了全面的指南.无论您是初学者还是经验丰富的开发者,这篇文章 ...

  7. Epic资源转到unity的方法

    众所周知,unity中的素材主要是通过unity资源商店获取的.但是unity资源商店的白嫖机会太少了,而隔壁UE的Epic资源商店就有每月免费的资源,不白嫖成何体统?但是UE咱也不会用啊,白嫖的资源 ...

  8. JAVA 类显式加载

    类显式加载 1.Class.forName("classloader.Dog");  方式加载   Example1 1 package classloader; 2 3 publ ...

  9. 基于亚博k210+arduino 智能垃圾桶(23工训赛)

    #2023 10 15 派大星改 # object classifier boot.py # generated by maixhub.com from fpioa_manager import * ...

  10. 手撕Vuex-提取模块信息

    前言 在上一篇[手撕Vuex-模块化共享数据]文章中,已经了解了模块化,与共享数据的注意点. 那么接下来就要在我们自己的 Nuex 中实现共享数据模块化的功能.那么怎么在我们自己的 Nuex 中实现共 ...