AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

用了Go匿名結(jié)構(gòu)體,搬磚效率更高,產(chǎn)量更足了

來(lái)源: 責(zé)編: 時(shí)間:2023-08-14 22:00:59 330觀看
導(dǎo)讀今天給大家分享一個(gè)使用匿名結(jié)構(gòu)體,提升Go編程效率的小技巧,沒(méi)什么技術(shù)深度,屬于在日常寫(xiě)代碼過(guò)程中積累下來(lái)的一個(gè)提升自己編程效率的小經(jīng)驗(yàn)。這個(gè)技巧之所以提效率主要體現(xiàn)在兩方面:減少一些不會(huì)復(fù)用的類型定義節(jié)省糾結(jié)

今天給大家分享一個(gè)使用匿名結(jié)構(gòu)體,提升Go編程效率的小技巧,沒(méi)什么技術(shù)深度,屬于在日常寫(xiě)代碼過(guò)程中積累下來(lái)的一個(gè)提升自己編程效率的小經(jīng)驗(yàn)。1RJ28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)技巧之所以提效率主要體現(xiàn)在兩方面:1RJ28資訊網(wǎng)——每日最新資訊28at.com

  • 減少一些不會(huì)復(fù)用的類型定義
  • 節(jié)省糾結(jié)該給類型起什么名字的時(shí)間

尤其第二項(xiàng),通過(guò)匿名結(jié)構(gòu)體這個(gè)名字就能體現(xiàn)出來(lái),它本身就沒(méi)有類型名,這能節(jié)省不少想名字的時(shí)間。再一個(gè)也能減少起錯(cuò)名字給其他人帶來(lái)的誤解,畢竟并不是所有人編程時(shí)都會(huì)按照英文的詞法做命名的。1RJ28資訊網(wǎng)——每日最新資訊28at.com

下面我先從普通結(jié)構(gòu)體說(shuō)起,帶大家看看什么情形下用匿名結(jié)構(gòu)體會(huì)帶來(lái)編碼效率的提升。1RJ28資訊網(wǎng)——每日最新資訊28at.com

具名結(jié)構(gòu)體

具名結(jié)構(gòu)體就是平時(shí)用的普通結(jié)構(gòu)體。1RJ28資訊網(wǎng)——每日最新資訊28at.com

結(jié)構(gòu)體大家都知道,用于把一組字段組織在一起,來(lái)在Go語(yǔ)言里抽象表達(dá)現(xiàn)實(shí)世界的事物,類似“藍(lán)圖”一樣。1RJ28資訊網(wǎng)——每日最新資訊28at.com

比如說(shuō)定義一個(gè)名字為Car的結(jié)構(gòu)體在程序里表示“小汽車(chē)”1RJ28資訊網(wǎng)——每日最新資訊28at.com

// 定義結(jié)構(gòu)體類型'car'type car struct {    make    string    model   string    mileage int}

用到這個(gè)結(jié)構(gòu)體的地方通過(guò)其名字引用其即可,比如創(chuàng)建上面定義的結(jié)構(gòu)體的實(shí)例1RJ28資訊網(wǎng)——每日最新資訊28at.com

// 創(chuàng)建car 的實(shí)例newCar := car{    make:    "Ford",    model:   "taurus",    mileage: 200000,}

匿名結(jié)構(gòu)體

匿名結(jié)構(gòu)體顧名思義就是沒(méi)有名字的結(jié)構(gòu)體,通常只用于在代碼中僅使用一次的結(jié)構(gòu)類型,比如1RJ28資訊網(wǎng)——每日最新資訊28at.com

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

上面這個(gè)函數(shù)中聲明的匿名結(jié)構(gòu)體賦值給了函數(shù)中的變量,所以只能在函數(shù)中使用。1RJ28資訊網(wǎng)——每日最新資訊28at.com

如果一個(gè)結(jié)構(gòu)體初始化后只被使用一次,那么使用匿名結(jié)構(gòu)體就會(huì)很方便,不用在程序的package中定義太多的結(jié)構(gòu)體類型,比如在解析接口的響應(yīng)到結(jié)構(gòu)體后,就可以使用匿名結(jié)構(gòu)體1RJ28資訊網(wǎng)——每日最新資訊28at.com

用于解析接口響應(yīng)

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}

類似上面這種代碼一般在控制層寫(xiě),可以通過(guò)匿名結(jié)構(gòu)體實(shí)例解析到請(qǐng)求后再去創(chuàng)建對(duì)應(yīng)的DTO或者領(lǐng)域?qū)ο蠊┓?wù)層或者領(lǐng)域?qū)邮褂谩?span style="display:none">1RJ28資訊網(wǎng)——每日最新資訊28at.com

有人會(huì)問(wèn)為什么不直接把API的響應(yīng)解析到DTO對(duì)象里,這里說(shuō)一下,匿名結(jié)構(gòu)體的使用場(chǎng)景是在覺(jué)得定一個(gè)Struct 不值得、不方便的情況下才用的。 比如程序拿到接口響應(yīng)后需要按業(yè)務(wù)規(guī)則加工下才能創(chuàng)建DTO實(shí)例這種情況,就很適合用匿名結(jié)構(gòu)體先解析響應(yīng)。1RJ28資訊網(wǎng)——每日最新資訊28at.com

比用map更健壯

這里再說(shuō)一點(diǎn)使用匿名結(jié)構(gòu)體的好處。1RJ28資訊網(wǎng)——每日最新資訊28at.com

使用匿名解析接口響應(yīng)要比把響應(yīng)解析到map[string]interface{}類型的變量里要好很多,json數(shù)據(jù)解析到匿名結(jié)構(gòu)體的時(shí)候在解析的過(guò)程中會(huì)進(jìn)行類型檢查,會(huì)更安全。使用的時(shí)候直接通過(guò)s.FieldName訪問(wèn)字段也比map訪問(wèn)起來(lái)更方便和直觀。1RJ28資訊網(wǎng)——每日最新資訊28at.com

用于定義項(xiàng)目約定的公共字段

除了上面這種結(jié)構(gòu)體初始化后只使用一次的情況,在項(xiàng)目中定義各個(gè)接口的返回或者是DTO時(shí),有的公共字段使用匿名結(jié)構(gòu)體聲明類型也很方便。1RJ28資訊網(wǎng)——每日最新資訊28at.com

一般在啟動(dòng)項(xiàng)目的時(shí)候我們都會(huì)約定項(xiàng)目提供的接口的響應(yīng)值結(jié)構(gòu),比如響應(yīng)里必須包含Code、Msg、Data三個(gè)字段,每個(gè)接口會(huì)再細(xì)分定義返回的Data的結(jié)構(gòu),這個(gè)時(shí)候用匿名結(jié)構(gòu)題能節(jié)省一部分編碼效率。1RJ28資訊網(wǎng)——每日最新資訊28at.com

比如下面這個(gè)Reponse的結(jié)構(gòu)體類型的定義1RJ28資訊網(wǎng)——每日最新資訊28at.com

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"`}

就省的先去定義一個(gè)UserCoupon類型1RJ28資訊網(wǎng)——每日最新資訊28at.com

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了1RJ28資訊網(wǎng)——每日最新資訊28at.com

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

當(dāng)然如果UserCoupon是你的項(xiàng)目其他地方也會(huì)用到的類型,那么先聲明,順帶在Response結(jié)構(gòu)體里也使用是沒(méi)問(wèn)題的,只要會(huì)多次用到的類型都建議聲明成正常的結(jié)構(gòu)體類型。1RJ28資訊網(wǎng)——每日最新資訊28at.com

還是那句話匿名結(jié)構(gòu)體只在你覺(jué)得"這還要定義個(gè)類型?”時(shí)候使用,用好的確實(shí)能提高點(diǎn)代碼生產(chǎn)效率。1RJ28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本次的分享就到這里了,內(nèi)容比較簡(jiǎn)單,記住這個(gè)口訣:匿名結(jié)構(gòu)體只在你寫(xiě)代碼時(shí)覺(jué)得這還要定義個(gè)類型,感覺(jué)沒(méi)必要的時(shí)候使用,采納這個(gè)技巧,時(shí)間長(zhǎng)了還是能看到一些自己效率的提高的。1RJ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-5711-0.html用了Go匿名結(jié)構(gòu)體,搬磚效率更高,產(chǎn)量更足了

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: gRPC?vs?REST:創(chuàng)建API的方法比較

下一篇: 讓我們一起聊一聊反射

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 6月安卓手機(jī)好評(píng)榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價(jià)比榜之后,我們來(lái)看最后的安卓手機(jī)好評(píng)榜,數(shù)據(jù)來(lái)源安兔兔評(píng)測(cè),收集時(shí)間2023年6月1日至6月30日,僅限國(guó)內(nèi)市場(chǎng)。第一名:魅族20 Pro好評(píng)率:95%5月份的時(shí)候魅族20 Pro就是
  • 把LangChain跑起來(lái)的三個(gè)方法

    使用LangChain開(kāi)發(fā)LLM應(yīng)用時(shí),需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過(guò)這個(gè)步驟先學(xué)習(xí)LLM模型的應(yīng)用,對(duì)Langchain進(jìn)行快速上手?本片講解3個(gè)把LangChain跑起來(lái)
  • 三言兩語(yǔ)說(shuō)透設(shè)計(jì)模式的藝術(shù)-單例模式

    寫(xiě)在前面單例模式是一種常用的軟件設(shè)計(jì)模式,它所創(chuàng)建的對(duì)象只有一個(gè)實(shí)例,且該實(shí)例易于被外界訪問(wèn)。單例對(duì)象由于只有一個(gè)實(shí)例,所以它可以方便地被系統(tǒng)中的其他對(duì)象共享,從而減少
  • 微信語(yǔ)音大揭秘:為什么禁止轉(zhuǎn)發(fā)?

    大家好,我是你們的小米。今天,我要和大家聊一個(gè)有趣的話題:為什么微信語(yǔ)音不可以轉(zhuǎn)發(fā)?這是一個(gè)我們經(jīng)常在日常使用中遇到的問(wèn)題,也是一個(gè)讓很多人好奇的問(wèn)題。讓我們一起來(lái)揭開(kāi)這
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(chǔ)(消息堆積)、消費(fèi) 三大塊領(lǐng)域。那接下來(lái),我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過(guò)程。注意,如果白話中不小心提到相關(guān)代
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對(duì)于自己的“今天”,百度也很迷茫。“新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來(lái)一個(gè) 1。”這是2022年底,李彥宏
  • iQOO Neo8系列今日官宣:首發(fā)天璣9200+ 全球安卓最強(qiáng)芯!

    在昨日舉行的的聯(lián)發(fā)科新一代旗艦芯片天璣9200+的發(fā)布會(huì)上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品將全球首發(fā)搭載這款當(dāng)前性能最強(qiáng)大的移動(dòng)平臺(tái)
  • 英特爾Xe-HP項(xiàng)目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報(bào)道,英特爾高級(jí)副總裁兼加速計(jì)算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • 蘋(píng)果140W USB-C充電器:采用氮化鎵技術(shù)

    據(jù)10 月 30 日 9to5 Mac 消息報(bào)道,當(dāng)蘋(píng)果推出新的 MacBook Pro 2021 時(shí),該公司還推出了新的 140W USB-C 充電器,附贈(zèng)在 MacBook Pro 16 英寸機(jī)型的盒子里,也支
Top