第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

簡(jiǎn)化golang中if else的表達(dá)

簡(jiǎn)化golang中if else的表達(dá)

Go
瀟瀟雨雨 2022-10-24 15:05:26
我有頭部、最后、頁(yè)面、限制和偏移過(guò)濾器的邏輯模塊。如 :../example/param 如果沒(méi)有查詢,返回所有值../example/param?limit=10 返回前 10 個(gè)值..example/param?offset=3 從數(shù)字 4 到 23 返回值(默認(rèn)限制為 20)..example/param?limit=15&offset=2 返回值 3 到 17../example/param?page=2&limit=5 返回值 6 到 10../example/param?head=15 返回前 15 個(gè)值../example/param?last=15 返回最后 15 個(gè)值../example/param?head=8&last=4 返回錯(cuò)誤../example/param?page=3&offset=4 返回錯(cuò)誤../example/param?page=2&limit=5&offset=6 返回錯(cuò)誤我有默認(rèn)參數(shù),如:var defaultPageParameter = PageParameter{Limit:  20,Offset: 0,Page: 1,Head: 0,Last: 0,}limit := pagePara.Limitoffset := pagePara.Offsetpage := pagePara.Pagehead := pagePara.Headlast := pagePara.LastdefaultPage := defaultPageParameter.PagedefaultLimit := defaultPageParameter.LimitdefaultOffset := defaultPageParameter.Offsetpaginate := (page*limit)-limitif else 我已經(jīng)寫(xiě)了一些表達(dá)式,但是這段代碼真的太多了,我想簡(jiǎn)化代碼。
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

在不了解更多周圍代碼的情況下,很難簡(jiǎn)化整個(gè)事情并為您提供完成的代碼。


但是我有幾個(gè)建議給你,我認(rèn)為你可以應(yīng)用這些建議來(lái)簡(jiǎn)化你自己的邏輯。


建議 #1

我在這里看到的一個(gè)問(wèn)題是使邏輯更加混亂,這是int輸入變量(偏移量、限制、頁(yè)面、頭部、最后)的基本類型()的使用。


問(wèn)題是您正在將輸入變量與默認(rèn)值(在 Go 中稱為“零值”)進(jìn)行比較,例如 0,或者defaultLimit您實(shí)際嘗試檢查的是用戶是否提供了這些輸入。


我的建議是使這些輸入變量指針 ( *int),以便您可以將它們與它們進(jìn)行比較,nil以便更輕松、更清楚地檢查用戶是否發(fā)送了這些輸入。我認(rèn)為這將使邏輯更具可讀性。


例如,offset & limit 你可以簡(jiǎn)化成這樣的:


if offset != nil {

  opt.SetSkip(*offset)

}


if limit != nil {

  opt.SetLimit(*limit)

}

建議#2

我還建議以不同的方式處理錯(cuò)誤。


首先檢查錯(cuò)誤情況。如果輸入無(wú)效,則返回錯(cuò)誤。


如果沒(méi)有錯(cuò)誤,然后處理成功案例。這是用 Golang(以及其他語(yǔ)言)編寫(xiě)代碼的一種非常常見(jiàn)的方式。


像這樣的東西:


// in the function from your post:


// check for error cases

err := checkError(offset, limit, page, head, last)

if err != nil {

  return make([]bson.M, 0), err

}


// handle success (non error) cases

if offset == defaultOffset && limit != defaultLimit && page == defaultPage {

    opt.SetLimit(limit)

    //if just limit

} else if // ... the rest of the success cases ...



// ... elsewhere in the same file (or package) ...


func checkError(offset, limit, page, head, last int) error {

  if offset != defaultOffset && limit != defaultLimit && page != defaultPage && head != 0 && last != 0{

      return errors.New("can't show all queries")

      //if there are all query

  } else if offset != defaultOffset && limit != defaultLimit && page != defaultPage {

      return errors.New("can't show all queries")

      //if there are all query

  } else if offset != defaultOffset && limit == defaultLimit && page != defaultPage{

      return errors.New("can't merge page and offset")

      //if combine page & offset

  } else if head != 0 && last != 0 {

      return errors.New("can't merge head and last")

      //if combine head & last

  } else if limit <=0 || page <= 0{

      return errors.New("BSON field value must be >= 0, actual value -20")

      //if limit & page value smaller than 0

  }


  return nil

}


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)