Skip to content

golang-infrastructure/go-if-expression

Repository files navigation

Golang的三元表达式实现

中文文档 | English Document

一、开发初衷

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
	}
}

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

三、 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:
	// 是

}

或者使用函数进行返回,仅有被命中分支的函数才会得到执行,不过这种方式并不简洁并不建议使用:

package main

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

func main() {

	r := if_expression.ReturnByFunc(true, func() string {
		fmt.Println("True分支被执行了")
		return "是"
	}, func() string {
		fmt.Println("False分支被执行了")
		return "否"
	})
	fmt.Println(r)
	// Output:
	// True分支被执行了
	// 是

}

About

Golang中的三元表达式的折中实现,用于减少代码行数提高可读性

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy