经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
MagicArray:像php一样,让Go业务代码不再卷!
来源:cnblogs  作者:阿旭^_^  时间:2023/12/27 11:07:46  对本文有异议

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

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

 

 

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

DTO替代方式:

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. arr "github.com/lingdor/magicarray"
  6. "time"
  7. )
  8. type UserDTO struct {
  9. Id int `json:"userid"`
  10. Name string
  11. }
  12. type ScoreDTO struct {
  13. Score int
  14. ScoreTime time.Time
  15. }
  16. type AreaDto struct {
  17. CityId int
  18. City string
  19. }
  20. func dtosCommand() {
  21. user := UserDTO{
  22. Id: 1,
  23. Name: "bobby",
  24. }
  25. score := ScoreDTO{
  26. Score: 66,
  27. ScoreTime: time.Now(),
  28. }
  29. area := AreaDto{
  30. CityId: 10000,
  31. City: "beij",
  32. }
  33. mix, _ := arr.Merge(arr.ValueofStruct(user), score, area)
  34. mix = arr.Pick(mix, "Id", "City", "Score")
  35. if bs, err := json.Marshal(mix); err == nil {
  36. fmt.Println(string(bs))
  37. } else {
  38. panic(err)
  39. }
  40. }

 

输出

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

数据变换

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. arr "github.com/lingdor/magicarray"
  6. )
  7. type ColumnUserEntity struct {
  8. Id int `json:"uid"`
  9. UserName string
  10. IsMale bool
  11. }
  12. func columnCommand() {
  13. users := []ColumnUserEntity{
  14. {
  15. Id: 1,
  16. UserName: "Bobby",
  17. IsMale: true,
  18. },
  19. {
  20. Id: 2,
  21. UserName: "Lily",
  22. IsMale: false,
  23. },
  24. }
  25. usersArr := arr.ValueOfSlice(users)
  26. usersArr = arr.WashColumn(usersArr, arr.WashTagRuleJsonInitialLower())
  27. if bs, err := json.Marshal(usersArr); err == nil {
  28. fmt.Println(string(bs))
  29. } else {
  30. panic(err)
  31. }
  32. usersArr = arr.Column(usersArr, "UserName")
  33. if bs, err := json.Marshal(usersArr); err == nil {
  34. fmt.Println(string(bs))
  35. } else {
  36. panic(err)
  37. }
  38. }

输出

  1. ["Bobby","Lily"]

tag操作

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. arr "github.com/lingdor/magicarray"
  6. )
  7. type UserEntity struct {
  8. Id int `json:"uid"`
  9. UserName string
  10. IsMale bool
  11. }
  12. func tagCommand() {
  13. users := UserEntity{
  14. Id: 1,
  15. UserName: "Bobby",
  16. IsMale: true,
  17. }
  18. userArr := arr.ValueofStruct(users)
  19. userArr = arr.SetTag(userArr, "Id", "json", "UserId")
  20. if bs, err := json.Marshal(userArr); err == nil {
  21. fmt.Println(string(bs))
  22. } else {
  23. panic(err)
  24. }
  25. }

 

输出

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

 

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

 

原文链接:https://www.cnblogs.com/a-xu/p/17929336.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号