首页 > 资讯 >

用了Go匿名结构体,搬砖效率更高,产量更足了

2023-08-14 10:25:19 来源:网管叨bi叨

今天给大家分享一个使用匿名结构体,提升Go编程效率的小技巧,没什么技术深度,属于在日常写代码过程中积累下来的一个提升自己编程效率的小经验。


【资料图】

这个技巧之所以提效率主要体现在两方面:

减少一些不会复用的类型定义节省纠结该给类型起什么名字的时间

尤其第二项,通过匿名结构体这个名字就能体现出来,它本身就没有类型名,这能节省不少想名字的时间。再一个也能减少起错名字给其他人带来的误解,毕竟并不是所有人编程时都会按照英文的词法做命名的。

下面我先从普通结构体说起,带大家看看什么情形下用匿名结构体会带来编码效率的提升。

具名结构体

具名结构体就是平时用的普通结构体。

结构体大家都知道,用于把一组字段组织在一起,来在Go语言里抽象表达现实世界的事物,类似“蓝图”一样。

比如说定义一个名字为Car的结构体在程序里表示“小汽车”

// 定义结构体类型"car"type car struct {    make    string    model   string    mileage int}

用到这个结构体的地方通过其名字引用其即可,比如创建上面定义的结构体的实例

// 创建car 的实例newCar := car{    make:    "Ford",    model:   "taurus",    mileage: 200000,}
匿名结构体

匿名结构体顾名思义就是没有名字的结构体,通常只用于在代码中仅使用一次的结构类型,比如

func showMyCar() {    newCar := struct {        make    string        model   string        mileage int    }{        make:    "Ford",        model:   "Taurus",        mileage: 200000,    }    fmt.Printlb(newCar.mode)}

上面这个函数中声明的匿名结构体赋值给了函数中的变量,所以只能在函数中使用。

如果一个结构体初始化后只被使用一次,那么使用匿名结构体就会很方便,不用在程序的package中定义太多的结构体类型,比如在解析接口的响应到结构体后,就可以使用匿名结构体

用于解析接口响应
func createCarHandler(w http.ResponseWriter, req *http.Request) {    defer req.Body.Close()    decoder := json.NewDecoder(req.Body)    newCar := struct {        Make    string `json:"make"`        Model   string `json:"model"`        Mileage int    `json:"mileage"`    }{}    err := decoder.Decode(&newCar)    if err != nil {        log.Println(err)        return    }    ......    return}

类似上面这种代码一般在控制层写,可以通过匿名结构体实例解析到请求后再去创建对应的DTO或者领域对象供服务层或者领域层使用。

有人会问为什么不直接把API的响应解析到DTO对象里,这里说一下,匿名结构体的使用场景是在觉得定一个Struct 不值得、不方便的情况下才用的。 比如程序拿到接口响应后需要按业务规则加工下才能创建DTO实例这种情况,就很适合用匿名结构体先解析响应。

比用map更健壮

这里再说一点使用匿名结构体的好处。

使用匿名解析接口响应要比把响应解析到map[string]interface{}类型的变量里要好很多,json数据解析到匿名结构体的时候在解析的过程中会进行类型检查,会更安全。使用的时候直接通过s.FieldName访问字段也比map访问起来更方便和直观。

用于定义项目约定的公共字段

除了上面这种结构体初始化后只使用一次的情况,在项目中定义各个接口的返回或者是DTO时,有的公共字段使用匿名结构体声明类型也很方便。

一般在启动项目的时候我们都会约定项目提供的接口的响应值结构,比如响应里必须包含Code、Msg、Data三个字段,每个接口会再细分定义返回的Data的结构,这个时候用匿名结构题能节省一部分编码效率。

比如下面这个Reponse的结构体类型的定义

type UserCouponResponse struct { Code int64  `json:"code"` Msg  string `json:"message"` Data []*struct {  CouponId           int    `json:"couponId"`  ProdCode           string `json:"prodCode"`  UserId             int64  `json:"userId"`  CouponStatus       int    `json:"couponStatus"`  DiscountPercentage int    `json:"discount"` } `json:"data"`}

就省的先去定义一个UserCoupon类型

type UserCoupon struct {    CouponId           int    `json:"couponId"`    ProdCode           string `json:"prodCode"`    UserId             int64  `json:"userId"`    CouponStatus       int    `json:"couponStatus"`    DiscountPercentage int    `json:"discount"`}

再在Response声明里使用定义的UserCoupon了

type UserCouponResponse struct {    Code int64  `json:"code"`    Msg  string `json:"message"`    Data []*UserCoupon `json:"data"`}

当然如果UserCoupon是你的项目其他地方也会用到的类型,那么先声明,顺带在Response结构体里也使用是没问题的,只要会多次用到的类型都建议声明成正常的结构体类型。

还是那句话匿名结构体只在你觉得"这还要定义个类型?”时候使用,用好的确实能提高点代码生产效率。

总结

本次的分享就到这里了,内容比较简单,记住这个口诀:匿名结构体只在你写代码时觉得这还要定义个类型,感觉没必要的时候使用,采纳这个技巧,时间长了还是能看到一些自己效率的提高的。

标签:

用了Go匿名结构体,搬砖效率更高,产量更足了

今天给大家分享一个使用匿名结构体,提升Go编程效率的小技巧,没什么技

2023-08-14

平均降幅28.14%!宁夏医疗机构联盟第二批议价药品开标

8月11日,记者从自治区医保局获悉,自治区医疗机构联盟第二批议价药品

2023-08-14

游客在黄山拍到珍稀动物云豹?

8月12日,有网友拍视频反映,在安徽黄山上拍到神秘动物,不少网友认为

2023-08-14

苹果X用的什么电池

1、苹果X原装电池价格为569元左右,第三方电池价格参差不齐,低至130元

2023-08-14

焦作运用实景三维模型辅助环境执法 为全国率先应用

近日,记者从焦作市生态环境局获悉,该市生态环境综合行政执法支队利用

2023-08-14

中美医疗体制差异极大,完全没有可比性

【本文来自《问美国医生的收入是怎么算的,朋友说就四个字:按件计酬》

2023-08-14

接过亨德森队长袖标!范迪克发文:拿下1分,还需继续努力

直播吧8月14日讯利物浦在英超首轮1-1战平切尔西,新任队长范迪克在赛后

2023-08-14

囧用五笔怎么打 囧五笔怎么打

1、囧LWMV搜狗五笔囧LWMD万能五笔冏建议用极点五笔用QQ五笔打LWMVmwkdl

2023-08-14

红星观察|当极端天气成为新常态,城市如何更安全?

经历了北半球酷热高温,我国北方又迎来极端降雨,京津冀受灾严重。同一

2023-08-14

事业单位的九级职员 事业单位的九级职员是什么

0471房产来为大家解答以上的问题。事业单位的九级职员,事业单位的九级

2023-08-13

演员韩童生:来济宁曲阜是一直以来的愿望

视频加载中 齐鲁网·闪电新闻8月13日讯8月13日晚,青年导演创作扶持

2023-08-13

火影忍者442-462讲什么(火影忍者448)

很多人对火影忍者442-462讲什么,火影忍者448不是很了解那具体是什么情

2023-08-13

抓获13人 赤壁警方打掉一“笑气”犯罪团伙

抓获13人赤壁警方打掉一“笑气”犯罪团伙---湖北日报客户端讯犯罪团伙

2023-08-13

湖北天门:精细化服务助推平台经济安全驶入“快车道”

“这本《平台经济纳税人适用税收政策及办税操作手册》真实用,各类税费

2023-08-13

美国扭曲操作的结果

美国的宏观调控的骚操作真是让人大开眼界。在暴力加息,货币紧缩的同时

2023-08-13

贺荣在河南、山西调研监狱和基层司法行政工作

8月9日至12日,司法部党组书记、部长贺荣率调研组在河南、山西专题

2023-08-13

喝柠檬水,真的能美白、改善免疫力?

立秋一到,朋友圈好多人又开始晒“秋天的第一杯奶茶”,但也有不少人依

2023-08-13

惨败德国49分!中国男篮几乎一无是处,世界杯前失去信心

惨败德国49分!中国男篮几乎一无是处,世界杯前失去信心,德国,方硕,赵

2023-08-13

英超-阿森纳2-1迎开门红 萨卡世界波恩凯蒂亚破门

英超-阿森纳2-1迎开门红萨卡世界波恩凯蒂亚破门,阿森纳,英超,诺丁汉森

2023-08-13

北交所和全国股转公司7项举措支持受汛情影响地区和企业恢复发展

人民网北京8月13日电(记者李博)为支持受汛情影响地区(北京、天津、河北

2023-08-13

各地多措并举促进高校毕业生就业

各地围绕拓宽就业渠道、加强职业培训衔接等方面,采取积极举措,帮助高

2023-08-13

英仙座流星雨惊艳登场

英仙座流星雨惊艳登场市民抬头可看天幕大片八月的夜晚,正是观星好时节

2023-08-13

骄子香烟 骄子

1、娇子香烟价格表娇子(天之娇子红1972)180元 条娇子(天之娇子金)460元

2023-08-13

网络赚钱的平台有哪些(网赚项目平台)

小评来为大家解答以上问题。网络赚钱的平台有哪些,网赚项目平台很多人

2023-08-13

2023二建《工程法规》真题估分卷-单选题28

2023二建《工程法规》真题估分卷-单选题28 网上课程学习请电话咨询:40

2023-08-13

琉璃莲心火怎么来的 琉璃莲心火

前得乐前列胶囊(前得乐)

淮南 制 作 假 支 票/存 单

欧洲NCAP测试升级,车泡水也要打开车门,蔚来通过测试!

国家防办:当前防汛抗洪多线作战,形势依然非常严峻

汪小菲懒理具俊晔说妒忌,跟张兰合体为新店剪彩,现场人山人海

昌邑:反诈“热浪”来袭 反诈宣传又出新招

快递单打印机怎么设置 快递单打印机设置方法 快递单打印机怎么调试

河北省市两级工会向张家口受灾地区下拨救灾专项资金590万元

河北因洪涝灾害受损学校加紧灾后重建 确保在9月1日如期开学

诗经名句精选全集_诗经名句及翻译

黄玉髓手镯适合什么人戴

真实女友如何_真实女友怎么玩

真相终于被揭开!财政吃紧,钱原来是花在了这些地方

8月12日,足协官方公告:山东泰山队被处罚,即刻生效

中国人民银行:前7个月人民币贷款增加16.08万亿元

奥来德08月11日沪股通持有量9.56万股

投资者热议交易优化措施:机构看中流动性改善 散户期待马上实施

王洛宾与三毛二十集电视剧(王洛宾与三毛)

8月11日基金净值:融通领先成长混合(LOF)A最新净值1.372,跌1.65%

【天眼问政】花溪公园观景亭大树被刻“我爱你”,要真爱别伤害!

今晚!中超战3场,CCTV5+直播上海海港,央视APP转新川足成都蓉城

英伟达海外推出买 RTX 40 显卡送《守望先锋 2》终极版活动

乳源吹响征兵“集结号” 严把初检“第一关”

大爷高铁上戴耳机喝白酒全程安静 网友:第一次见在这儿喝酒的

Copyright @  2015-2022 太平洋家电网版权所有  备案号: 豫ICP备2022016495号-17   联系邮箱:93 96 74 66 9@qq.com