Golang 邪修: Golang 的三元表达式实现

项目地址: github.com/golang-infrastructure/g...

Golang 的三元表达式实现

一、开发初衷

Golang 中缺少三元表达式,就导致某些情况三元表达式一行就能搞定的事情到 Golang 里面就得写得很啰嗦,
这是无法忍受的,这个库就是借助大量自定义的 if 函数来实现类似三元表达式的功能,最新版本是基于泛型实现的。

使用此库之前:

if a % 2 == 0 {
    return "偶数"
} else {
    return "奇数"
}

使用此库之后:

return if_expression.Return(a % 2 == 0, "偶数", "奇数")

对比:

- if a % 2 == 0 {
-     return "偶数"
- } else {
-     return "奇数"
- }
+ return if_expression.Return(a % 2 == 0, "偶数", "奇数")

二、引入依赖

go get 安装:

go get -u github.com/golang-infrastructure/go-if-expression

如果你不想增加新的依赖,直接拷贝下面这段代码到你的 utils 中,泛型的实现版本非常简洁:

package if_expression

// Return
//
//    @Description: if 实现的三元表达式
//    @param boolExpression: 布尔表达式,最终返回一个布尔值
//    @param trueReturnValue: 当 boolExpression 返回值为 true 的时候返回的值
//    @param falseReturnValue: 当 boolExpression 返回值为 false 的时候返回的值
//    @return bool: 三元表达式的结果,为 trueReturnValue 或者 falseReturnValue 中的一个
func Return[T any](boolExpression bool, trueReturnValue, falseReturnValue T) T {
    if boolExpression {
        return trueReturnValue
    } else {
        return falseReturnValue
    }
}

三、Example

比如最常见的默认值场景:

threadNum := 0
fmt.Printf("线程数: %d", if_expression.Return(threadNum == 0, 1, threadNum))

使用的例子:

package main

import (
    "fmt"
    if_expression "github.com/golang-infrastructure/go-if-expression"
)

func main() {

    r := if_expression.Return(true, "是", "否")
    fmt.Println(r)
    // Output:
    // 是

}
本帖已被设为精华帖!
本帖由系统于 1年前 自动加精
讨论数量: 6

是一位代码质量有所追求的大佬,仰慕~

1年前 评论
fatrbaby

我个人是能不写三元式就尽量不写三元式的

1年前 评论
巴啦啦

果然邪修!

1年前 评论
pangxianfei

无非是一个func 函数,封装下就好了。

1年前 评论

用 go 就不要再用 php 的思维了

1年前 评论
ry34t42rr 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!