欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中多個(gè)if代碼優(yōu)化小技巧

 更新時(shí)間:2023年10月05日 11:17:06   作者:yunyi  
這篇文章主要為大家詳細(xì)介紹了Golang中一些常用的if代碼優(yōu)化小技巧,w文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

沒(méi)優(yōu)化之前: 嵌套if, 檢查是否有中文字段值, 否則去查找英文值, 都沒(méi)有則返回默認(rèn)值

if record.City.Names["zh-CN"] == "" {
	city = record.City.Names["en"]
	if record.City.Names["en"] == "" {
		city = record.City.Names["en"]
	}
} else {
	city = "未知地域"
}

優(yōu)化后: 平級(jí)if...else代替嵌套if

if name, ok := record.City.Names["zh-CN"]; ok {
	city = name
} else if city, ok = record.City.Names["en"]; ok {
	city = record.City.Names["en"]
} else {
	city = "未知地域"
}

知識(shí)點(diǎn): 利用go的ok模式,對(duì)查詢(xún)map對(duì)象的值是否存在更加簡(jiǎn)潔和安全

更進(jìn)一步的優(yōu)化, 去掉else

這對(duì)else的處理邏輯有明確的值時(shí)非常有用

city = "未知地域"
if name, ok := record.City.Names["zh-CN"]; ok {
	city = name
} else if name, ok = record.City.Names["en"]; ok {
	city = name
}

使用switch代替多個(gè)if分支: 根據(jù)成績(jī)的分?jǐn)?shù)段給出對(duì)應(yīng)的等級(jí)

func calculateGrade(score int) string {
	var grade string
	if score >= 90 && score <= 100 {
		grade = "A"
	} else if score >= 80 && score < 90 {
		grade = "B"
	} else if score >= 70 && score < 80 {
		grade = "C"
	} else if score >= 60 && score < 70 {
		grade = "D"
	} else if score >= 0 && score < 60 {
		grade = "F"
	} else {
		grade = "Invalid Score"
	}
	return grade
}

優(yōu)化后: 使代碼更加簡(jiǎn)潔,并且避免了多個(gè)嵌套的 if-else 語(yǔ)句。同時(shí),使用 switch 語(yǔ)句還能夠處理默認(rèn)情況,即當(dāng) score 不滿足任何一個(gè)分支條件時(shí),默認(rèn)返回 "Invalid Score"

func calculateGrade(score int) string {
	var grade string
	switch {
	case score >= 90 && score <= 100:
		grade = "A"
	case score >= 80 && score < 90:
		grade = "B"
	case score >= 70 && score < 80:
		grade = "C"
	case score >= 60 && score < 70:
		grade = "D"
	case score >= 0 && score < 60:
		grade = "F"
	default:
		grade = "Invalid Score"
	}
	return grade
}

錯(cuò)誤檢查

首先看etcdgithub官網(wǎng)的錯(cuò)誤處理例子:

resp, err := cli.Put(ctx, "", "")
if err != nil {
	switch err {
	case context.Canceled:
		log.Fatalf("ctx is canceled by another routine: %v", err)
	case context.DeadlineExceeded:
		log.Fatalf("ctx is attached with a deadline is exceeded: %v", err)
	case rpctypes.ErrEmptyKey:
		log.Fatalf("client-side error: %v", err)
	default:
		log.Fatalf("bad cluster endpoints, which are not etcd servers: %v", err)
	}
}

我們可以進(jìn)一步優(yōu)化, 使用go自帶的包errors對(duì)錯(cuò)誤類(lèi)型進(jìn)行更加健壯的檢查, 但是對(duì)開(kāi)發(fā)者的要求較高, 需要預(yù)定義正確的錯(cuò)誤類(lèi)型, 來(lái)保證正確的比較錯(cuò)誤

resp, err := cli.Put(ctx, "", "")
if err2 != nil {
		switch {
		case errors.Is(err, context.Canceled):
			log.Fatalf("ctx is canceled by another routine: %v", err)
		case errors.Is(err, context.DeadlineExceeded):
			log.Fatalf("ctx is attached with a deadline is exceeded: %v", err)
		case errors.Is(err, rpctypes.ErrEmptyKey):
			log.Fatalf("client-side error: %v", err)
		default:
			log.Fatalf("bad cluster endpoints, which are not etcd servers: %v", err)
		}
	}

到此這篇關(guān)于Golang中多個(gè)if代碼優(yōu)化小技巧的文章就介紹到這了,更多相關(guān)go if優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go?處理大數(shù)組使用?for?range?和?for?循環(huán)的區(qū)別

    Go?處理大數(shù)組使用?for?range?和?for?循環(huán)的區(qū)別

    這篇文章主要介紹了Go處理大數(shù)組使用for?range和for循環(huán)的區(qū)別,對(duì)于遍歷大數(shù)組而言,for循環(huán)能比f(wàn)or?range循環(huán)更高效與穩(wěn)定,這一點(diǎn)在數(shù)組元素為結(jié)構(gòu)體類(lèi)型更加明顯,下文具體分析感興趣得小伙伴可以參考一下
    2022-05-05
  • mayfly-go部署和使用詳解

    mayfly-go部署和使用詳解

    這篇文章主要介紹了mayfly-go部署和使用詳解,此處部署基于CentOS7.4部署,結(jié)合實(shí)例代碼圖文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • go語(yǔ)言的四數(shù)相加等于指定數(shù)算法

    go語(yǔ)言的四數(shù)相加等于指定數(shù)算法

    這篇文章主要介紹了go語(yǔ)言的四數(shù)相加等于指定數(shù)算法的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • go 下載非標(biāo)準(zhǔn)庫(kù)包(部份包被墻了)到本地使用的方法

    go 下載非標(biāo)準(zhǔn)庫(kù)包(部份包被墻了)到本地使用的方法

    今天小編就為大家分享一篇go 下載非標(biāo)準(zhǔn)庫(kù)包(部份包被墻了)到本地使用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 利用Golang生成整數(shù)隨機(jī)數(shù)方法示例

    利用Golang生成整數(shù)隨機(jī)數(shù)方法示例

    這篇文章主要介紹了利用Golang生成整數(shù)隨機(jī)數(shù)的相關(guān)資料,文中給出了詳細(xì)的介紹和完整的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • Golang極簡(jiǎn)入門(mén)教程(三):并發(fā)支持

    Golang極簡(jiǎn)入門(mén)教程(三):并發(fā)支持

    這篇文章主要介紹了Golang極簡(jiǎn)入門(mén)教程(三):并發(fā)支持,本文講解了goroutine線程、channel 操作符等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Go1.20最新資訊go?arena手動(dòng)管理內(nèi)存鴿了

    Go1.20最新資訊go?arena手動(dòng)管理內(nèi)存鴿了

    由于過(guò)于繁雜,Go?核心團(tuán)隊(duì)成員@Ian?Lance?Taylor,也表態(tài):目前尚未做出任何決定,也不可能在短期內(nèi)做出任何決定,可以認(rèn)為這個(gè)提案基本鴿了,今天這篇文章就是給大家同步目前的情況
    2023-11-11
  • Go語(yǔ)言實(shí)現(xiàn)Base64、Base58編碼與解碼

    Go語(yǔ)言實(shí)現(xiàn)Base64、Base58編碼與解碼

    本文主要介紹了Base64、Base58編碼與解碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • golang日志包logger的用法詳解

    golang日志包logger的用法詳解

    這篇文章主要介紹了golang日志包logger的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 使用Go實(shí)現(xiàn)TLS服務(wù)器和客戶端的示例

    使用Go實(shí)現(xiàn)TLS服務(wù)器和客戶端的示例

    本文主要介紹了Go實(shí)現(xiàn)TLS服務(wù)器和客戶端的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論