日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

用了Go匿名結構體,搬磚效率更高,產量更足了

來源: 責編: 時間:2023-08-14 22:00:59 323觀看
導讀今天給大家分享一個使用匿名結構體,提升Go編程效率的小技巧,沒什么技術深度,屬于在日常寫代碼過程中積累下來的一個提升自己編程效率的小經驗。這個技巧之所以提效率主要體現在兩方面:減少一些不會復用的類型定義節省糾結

今天給大家分享一個使用匿名結構體,提升Go編程效率的小技巧,沒什么技術深度,屬于在日常寫代碼過程中積累下來的一個提升自己編程效率的小經驗。swj28資訊網——每日最新資訊28at.com

這個技巧之所以提效率主要體現在兩方面:swj28資訊網——每日最新資訊28at.com

  • 減少一些不會復用的類型定義
  • 節省糾結該給類型起什么名字的時間

尤其第二項,通過匿名結構體這個名字就能體現出來,它本身就沒有類型名,這能節省不少想名字的時間。再一個也能減少起錯名字給其他人帶來的誤解,畢竟并不是所有人編程時都會按照英文的詞法做命名的。swj28資訊網——每日最新資訊28at.com

下面我先從普通結構體說起,帶大家看看什么情形下用匿名結構體會帶來編碼效率的提升。swj28資訊網——每日最新資訊28at.com

具名結構體

具名結構體就是平時用的普通結構體。swj28資訊網——每日最新資訊28at.com

結構體大家都知道,用于把一組字段組織在一起,來在Go語言里抽象表達現實世界的事物,類似“藍圖”一樣。swj28資訊網——每日最新資訊28at.com

比如說定義一個名字為Car的結構體在程序里表示“小汽車”swj28資訊網——每日最新資訊28at.com

// 定義結構體類型'car'type car struct {    make    string    model   string    mileage int}

用到這個結構體的地方通過其名字引用其即可,比如創建上面定義的結構體的實例swj28資訊網——每日最新資訊28at.com

// 創建car 的實例newCar := car{    make:    "Ford",    model:   "taurus",    mileage: 200000,}

匿名結構體

匿名結構體顧名思義就是沒有名字的結構體,通常只用于在代碼中僅使用一次的結構類型,比如swj28資訊網——每日最新資訊28at.com

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

上面這個函數中聲明的匿名結構體賦值給了函數中的變量,所以只能在函數中使用。swj28資訊網——每日最新資訊28at.com

如果一個結構體初始化后只被使用一次,那么使用匿名結構體就會很方便,不用在程序的package中定義太多的結構體類型,比如在解析接口的響應到結構體后,就可以使用匿名結構體swj28資訊網——每日最新資訊28at.com

用于解析接口響應

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或者領域對象供服務層或者領域層使用。swj28資訊網——每日最新資訊28at.com

有人會問為什么不直接把API的響應解析到DTO對象里,這里說一下,匿名結構體的使用場景是在覺得定一個Struct 不值得、不方便的情況下才用的。 比如程序拿到接口響應后需要按業務規則加工下才能創建DTO實例這種情況,就很適合用匿名結構體先解析響應。swj28資訊網——每日最新資訊28at.com

比用map更健壯

這里再說一點使用匿名結構體的好處。swj28資訊網——每日最新資訊28at.com

使用匿名解析接口響應要比把響應解析到map[string]interface{}類型的變量里要好很多,json數據解析到匿名結構體的時候在解析的過程中會進行類型檢查,會更安全。使用的時候直接通過s.FieldName訪問字段也比map訪問起來更方便和直觀。swj28資訊網——每日最新資訊28at.com

用于定義項目約定的公共字段

除了上面這種結構體初始化后只使用一次的情況,在項目中定義各個接口的返回或者是DTO時,有的公共字段使用匿名結構體聲明類型也很方便。swj28資訊網——每日最新資訊28at.com

一般在啟動項目的時候我們都會約定項目提供的接口的響應值結構,比如響應里必須包含Code、Msg、Data三個字段,每個接口會再細分定義返回的Data的結構,這個時候用匿名結構題能節省一部分編碼效率。swj28資訊網——每日最新資訊28at.com

比如下面這個Reponse的結構體類型的定義swj28資訊網——每日最新資訊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"`}

就省的先去定義一個UserCoupon類型swj28資訊網——每日最新資訊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了swj28資訊網——每日最新資訊28at.com

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

當然如果UserCoupon是你的項目其他地方也會用到的類型,那么先聲明,順帶在Response結構體里也使用是沒問題的,只要會多次用到的類型都建議聲明成正常的結構體類型。swj28資訊網——每日最新資訊28at.com

還是那句話匿名結構體只在你覺得"這還要定義個類型?”時候使用,用好的確實能提高點代碼生產效率。swj28資訊網——每日最新資訊28at.com

總結

本次的分享就到這里了,內容比較簡單,記住這個口訣:匿名結構體只在你寫代碼時覺得這還要定義個類型,感覺沒必要的時候使用,采納這個技巧,時間長了還是能看到一些自己效率的提高的。swj28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5711-0.html用了Go匿名結構體,搬磚效率更高,產量更足了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: gRPC?vs?REST:創建API的方法比較

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

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 六大權益!華為8月服務日開啟:手機免費貼膜、維修免人工費

    8月5日消息,一年一度的華為開發者大會2023(Together)日前在松山湖拉開帷幕,與此同時,華為8月服務日也式開啟,到店可享六大專屬權益。華為用戶可在華為商城Ap
  • 轎車從天而降電動車主被撞身亡 超速搶道所致:現場視頻讓網友吵翻

    近日,上海青浦區法院判決轎車從天而降電動車主被撞身亡案,轎車車主被判有期徒刑一年。案件顯示當時男子駕駛轎車在上海某路段行駛,前車忽然轉彎提速超車,
  • 0糖0卡0脂 旭日森林仙草烏龍茶優惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時要賣為79.9元,今日下單領取50元優惠券,到手價為29.9元。產品規格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的“頭騰
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
Top 主站蜘蛛池模板: 瑞安市| 广水市| 遵义市| 嘉鱼县| 海原县| 沿河| 平泉县| 沙河市| 察隅县| 九寨沟县| 廉江市| 衢州市| 鄂温| 旬阳县| 新丰县| 额尔古纳市| 分宜县| 怀柔区| 三亚市| 孟村| 宝山区| 芦山县| 务川| 玉屏| 沧源| 太和县| 洪江市| 大港区| 密云县| 上栗县| 建平县| 滁州市| 宝山区| 青冈县| 仙游县| 乌鲁木齐县| 建湖县| 津南区| 洞口县| 兴化市| 岗巴县|