Giter Club home page Giter Club logo

go-if-expression's Introduction

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分支被执行了
	// 是

}

go-if-expression's People

Contributors

cc11001100 avatar songzhibin97 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

go-if-expression's Issues

boom

func TestMap(t *testing.T) {
	m := map[string]interface{}{
		"foo": "bar",
	}
	t.Log(m["bad"])    // nil
	t.Log(if_expression.Return(m["bad"] != nil, m["bad"].(string), "")) // ⚠️ 范型传nil进来就panic了.
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.