成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
一般在啟動項目的時候我們都會約定項目提供的接口的響應值結構,比如響應里必須包含Code、Msg、Data三個字段,每個接口會再細分定義返回的Data的結構,這個時候用匿名結構題能節省一部分編碼效率。

今天給大家分享一個使用匿名結構體,提升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結構體里也使用是沒問題的,只要會多次用到的類型都建議聲明成正常的結構體類型。

還是那句話匿名結構體只在你覺得"這還要定義個類型?”時候使用,用好的確實能提高點代碼生產效率。

總結

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

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2021-09-08 07:49:34

數據 Python技術

2025-04-11 08:45:00

2020-12-02 09:10:22

Go結構數據類型

2022-05-30 15:15:17

Python工具數據

2020-05-22 15:16:45

遠程工作辦公互聯網

2018-06-27 10:16:10

科技圈程序員大佬

2021-03-03 13:55:42

人工智能機器人失業

2020-11-30 06:17:03

Go語言

2023-07-29 15:03:29

2021-11-02 12:19:18

Go函數結構

2021-04-20 09:00:48

Go 語言結構體type

2021-04-28 11:35:06

Java框架日志

2020-12-02 08:45:36

Go語言

2020-11-26 06:40:24

Go語言基礎

2020-11-23 08:54:14

Go語言結構體

2023-05-09 20:37:16

數字基礎設施

2021-12-01 10:18:08

MongoDBMySQL數據庫

2023-11-21 08:03:43

語言架構偏移量

2019-10-25 22:00:38

機器人人工智能系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产又色又爽又黄又免费 | 精品一区二区三区91 | 午夜视频一区二区 | 范冰冰一级做a爰片久久毛片 | 欧洲成人午夜免费大片 | 国产精品国产精品国产专区不卡 | 欧美在线视频一区二区 | 中文字幕啪啪 | 久久天天躁狠狠躁夜夜躁2014 | www性色 | 国产成人精品在线播放 | 国产精品久久在线观看 | 精品一区视频 | 国产精品欧美一区二区三区不卡 | 亚洲不卡在线观看 | 国产精品综合视频 | 一级大片 | 三级在线视频 | 欧美成人第一页 | 国产在线二区 | 91大神在线资源观看无广告 | 亚洲成人精品 | 视频一区二区三区在线观看 | 日韩一区二区福利视频 | 日韩二区 | 91精品国产91久久久久久吃药 | 最新国产精品精品视频 | 久久国产精品免费 | 亚洲成人一区二区 | 亚洲黄色在线 | 在线观看毛片网站 | 欧美电影一区 | 欧美一区二区三区在线观看 | 国产精品一区二区av | 欧美综合久久 | 日韩在线欧美 | 日日摸夜夜爽人人添av | 久久6| 天天操夜夜操免费视频 | 欧美高清性xxxxhd | 久久久青草 |