最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang如何實(shí)現(xiàn)三元運(yùn)算符功能

 更新時(shí)間:2024年02月06日 08:52:47   作者:波羅學(xué)  
這篇文章主要介紹了在其他一些編程語(yǔ)言中,如?C?語(yǔ)言,三元運(yùn)算符是一種可以用一行代碼實(shí)現(xiàn)條件選擇的簡(jiǎn)便方法,那么在Go語(yǔ)言中如何實(shí)現(xiàn)類似功能呢,下面就跟隨小編一起學(xué)習(xí)一下吧

今天來(lái)聊聊在 Go 語(yǔ)言中如何實(shí)現(xiàn)類似三元運(yùn)算符的功能。

首先,什么是三元運(yùn)算符?

在其他一些編程語(yǔ)言中,如 C 語(yǔ)言,三元運(yùn)算符是一種可以用一行代碼實(shí)現(xiàn)條件選擇的簡(jiǎn)便方法。

x = condition ? a : b; // condition = true 則 x = a,否則 x = b

大道至簡(jiǎn)的 Go 中肯定是沒(méi)有這個(gè)運(yùn)算符。

今天這篇文章將會(huì)就此展開(kāi),介紹 Go 中三元運(yùn)算符的一些實(shí)踐。

讓我們正式開(kāi)始吧。

使用 if-else 語(yǔ)句

三元運(yùn)算符,本質(zhì)上其實(shí)就是 if-else 的簡(jiǎn)化版本。通過(guò) if-else 實(shí)現(xiàn)自然就是最常用的做法。

var x int
if condition {
    x = a
} else {
    x = b
}

非常簡(jiǎn)單且易理解,無(wú)心智負(fù)擔(dān)。畢竟,這就應(yīng)該是它本來(lái)的樣子。

雖然這比三元運(yùn)算符要長(zhǎng)一些,但它更容易理解,也是 Go 所推薦的方式。

一行表達(dá)式

三元運(yùn)算符之所以被人喜愛(ài),我覺(jué)得重要的一個(gè)原因就是:它足夠簡(jiǎn)潔。我們只要一行代碼就實(shí)現(xiàn)條件判斷。

在 Go 中,如果想在一行代碼實(shí)現(xiàn),可能嗎?

我們先來(lái)看看 rust 和 Python 是如何實(shí)現(xiàn)的。

如果了解 rust,你可能看過(guò)如下代碼。

let x = {
  if condition {
    a
  } else {
    b
  }
};

如上的代碼中,我們創(chuàng)建了一個(gè)代碼塊,它的最后一個(gè)表達(dá)式會(huì)作為 x 的值。這是 rust 所支持的語(yǔ)法。其實(shí)現(xiàn)代的不少語(yǔ)言支持這種簡(jiǎn)約語(yǔ)法。

或者更簡(jiǎn)潔下寫法也可以,如下:

let = if condition {a} else 

如果你了解 Python,你可能看到這樣的代碼。

x = a if condition else b

是不是更加簡(jiǎn)潔。

Go 不支持這樣的語(yǔ)法,我們要實(shí)現(xiàn)類似效果,就只能通過(guò)立刻執(zhí)行的匿名函數(shù)實(shí)現(xiàn)。

代碼如下:

x := func() int {
  if condition {
     return a
  }
  return b
}()

算了,好丑,太麻煩了!

看起來(lái)還是 if-else 好用。但我還是不甘心,還是希望實(shí)現(xiàn)一行代碼的效果,怎么辦呢?

If 函數(shù)

前面的示例中,我們通過(guò)匿名函數(shù)實(shí)現(xiàn)類似于三元運(yùn)算符的功能。那不是說(shuō),預(yù)實(shí)現(xiàn)一個(gè)函數(shù)即可?

讓我們寫一個(gè) If 的函數(shù)來(lái)模擬三元運(yùn)算符。這個(gè)函數(shù)接收一個(gè)布爾值和兩個(gè)可能的返回值。根據(jù)布爾值的真假,它返回其中一個(gè)值。

代碼如下所示:

func If(condition bool, a, b int) int {
    if condition {
        return a
    }
    return b
}

x := If(3 > 2, x1, x2)

現(xiàn)在的代碼是不是就清晰了許多呢?

但這種方法還是有個(gè)缺點(diǎn),就是針對(duì)不同的類型都要實(shí)現(xiàn)一個(gè) If 函數(shù),如 IfInt()IfString()、IfFloat() 等等。

不過(guò)從 Go 1.18 開(kāi)始,Go 成功引入泛型。

我們可以通過(guò)泛型擴(kuò)展一個(gè)更通用的 If 函數(shù),不僅僅適用于整數(shù),還可以用于其他類型。

示例代碼如下:

func If[T any](condition bool, a, b T) T {
    if condition {
        return a
    }
    return b
}

func main() {
    x := 10
    result := If(x > 0, "positive", "negative")
    fmt.Println(result) // 輸出 "positive"
}

當(dāng)然,我也不是建議這么用。既然官方不支持就算了吧,if-else 多寫幾行就多寫幾行吧。

奇淫巧技:基于 map

在網(wǎng)上,我還發(fā)現(xiàn)了一個(gè)奇淫巧技:基于 Map 模擬三元運(yùn)算法。

代碼如下:

x = map[string]int{
  true: b,
  false: c,
}[a]

基于 true 和 false 實(shí)現(xiàn)條件判斷。

這方法看起來(lái)挺有創(chuàng)意,但這其實(shí)會(huì)增加代碼的理解成本,降低可讀性。再者,這種方法的效率是沒(méi)有 if-else 的效率高的,因?yàn)樯婕暗搅?map 的算法實(shí)現(xiàn),沒(méi)有那么直接。

為什么 Go 沒(méi)有三元運(yùn)算符

你是否好奇,為什么 Go 語(yǔ)言沒(méi)有三元運(yùn)算符?

官方認(rèn)為三元運(yùn)算符有時(shí)會(huì)讓代碼變得復(fù)雜和難以理解。Go 鼓勵(lì)寫出更清晰直接的代碼。

一個(gè) C 語(yǔ)言版本的復(fù)雜三元運(yùn)算符示例代碼:

#include <stdio.h>

int main() {
    int x = 5, y = 10, z = 15;
    char *result;

    result = x > y ? "X" : 
             y > z ? "Y" : 
             z > x ? "Z" : 
             x == y ? "X equals Y" : 
             y == z ? "Y equals Z" : 
             x == z ? "X equals Z" : 
             "All equal";

    printf("%s\n", result);
    return 0;
}

看這個(gè)代碼,頭暈沒(méi)?

我們看看摘自官方文檔的原文:

The reason ?: is absent from Go is that the language's designers had seen the operation used too often to create impenetrably complex expressions. The if-else form, although longer, is unquestionably clearer. A language needs only one conditional control flow construct.

翻譯內(nèi)容:

Go 語(yǔ)言中沒(méi)有 ?: 運(yùn)算符的原因是,該語(yǔ)言的設(shè)計(jì)者們觀察到這種運(yùn)算符過(guò)于頻繁地被用來(lái)創(chuàng)建難以理解的復(fù)雜表達(dá)式。盡管 if-else 形式更長(zhǎng),但它無(wú)疑更清晰。一種語(yǔ)言只需要一種條件控制流構(gòu)造。

從 rust 和 python 的決策上也可看出,這個(gè)觀點(diǎn)得到了很多人的認(rèn)同。但與 Go 不同的是,rust 和 python 雖然不支持傳統(tǒng)的三元運(yùn)算符,它們都提供了其他簡(jiǎn)潔的寫法。

不禁思考:Go 強(qiáng)調(diào)大道至簡(jiǎn)。但 rust 和 python 其實(shí)也挺簡(jiǎn)單的,保留了三運(yùn)算法符簡(jiǎn)潔性的優(yōu)點(diǎn)。

總結(jié)

本文介紹 Go 中三元運(yùn)算符的最佳實(shí)踐。我們通過(guò) if-else 語(yǔ)句或立即執(zhí)行的匿名函數(shù)等方式來(lái)實(shí)現(xiàn)類似的功能。

除此以外,可以根據(jù)你的需要和你覺(jué)得哪種方法更容易理解來(lái)選擇使用。

以上就是golang如何實(shí)現(xiàn)三元運(yùn)算符功能的詳細(xì)內(nèi)容,更多關(guān)于go三元運(yùn)算符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談beego默認(rèn)處理靜態(tài)文件性能低下的問(wèn)題

    淺談beego默認(rèn)處理靜態(tài)文件性能低下的問(wèn)題

    下面小編就為大家?guī)?lái)一篇淺談beego默認(rèn)處理靜態(tài)文件性能低下的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 一篇帶你看懂Go語(yǔ)言中的字符串拼接(小白入門)

    一篇帶你看懂Go語(yǔ)言中的字符串拼接(小白入門)

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中進(jìn)行字符串拼接的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-02-02
  • golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解

    golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解

    這篇文章主要介紹了golang 輸出重定向:fmt Log,子進(jìn)程Log,第三方庫(kù)logrus的詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang通脈之方法詳情

    Golang通脈之方法詳情

    這篇文章主要介紹了Golang通脈方法,Go語(yǔ)言中的方法(Method)是一種作用于特定類型變量的函數(shù)。這種特定類型變量叫做接收者(Receiver)。接收者的概念就類似于,其他語(yǔ)言中的this或者 self,具體內(nèi)容請(qǐng)和小編一起來(lái)學(xué)習(xí)下面文章內(nèi)容吧
    2021-10-10
  • golang程序?qū)觩rometheus過(guò)程

    golang程序?qū)觩rometheus過(guò)程

    文章介紹了如何在Golang項(xiàng)目中集成Prometheus進(jìn)行監(jiān)控,包括安裝客戶端庫(kù)、定義和注冊(cè)指標(biāo)、暴露指標(biāo)端點(diǎn)、更新指標(biāo)值、配置標(biāo)簽和注冊(cè)表,以及生產(chǎn)環(huán)境的建議配置
    2025-10-10
  • Go語(yǔ)言的連接池管理的具體使用

    Go語(yǔ)言的連接池管理的具體使用

    這篇文章主要介紹了Go語(yǔ)言的連接池管理的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05
  • 如何用go-zero 實(shí)現(xiàn)中臺(tái)系統(tǒng)

    如何用go-zero 實(shí)現(xiàn)中臺(tái)系統(tǒng)

    這篇文章主要介紹了如何用go-zero 實(shí)現(xiàn)中臺(tái)系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Golang語(yǔ)言中切片的長(zhǎng)度和容量的概念和使用

    Golang語(yǔ)言中切片的長(zhǎng)度和容量的概念和使用

    這篇文章主要介紹了Golang語(yǔ)言中切片的長(zhǎng)度和容量的概念和使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go語(yǔ)言中nil判斷的注意事項(xiàng)(最新推薦)

    Go語(yǔ)言中nil判斷的注意事項(xiàng)(最新推薦)

    本文給大家介紹Go語(yǔ)言中nil判斷的注意事項(xiàng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-06-06
  • Go底層select的原理分析

    Go底層select的原理分析

    這篇文章主要介紹了Go底層select的原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06

最新評(píng)論

和平县| 高清| 富源县| 岳西县| 镶黄旗| 齐河县| 萨嘎县| 云南省| 阳西县| 如东县| 高阳县| 聂荣县| 许昌市| 池州市| 朝阳区| 兴宁市| 枝江市| 蒙阴县| 泾川县| 大英县| 平湖市| 乌拉特前旗| 峡江县| 翁牛特旗| 宜州市| 珲春市| 晋城| 建水县| 琼结县| 安徽省| 梧州市| 都匀市| 龙陵县| 凤台县| 颍上县| 东莞市| 洪雅县| 晴隆县| 景泰县| 吴江市| 陆良县|