operationV2

package
v1.64.60 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 10, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

README

多元操作

  1. 三元操作:简单用法

    package main
    
    import (
    	. `fmt`
    	`github.com/aid297/aid/operation/operationV2`
    )
    
    func main() {
    	res := operationV2.NewTernary(
    		operationV2.TrueValue("及格"),
    		operationV2.FalseValue("不及格"),
    	).GetByValue(true)
    
    	Printf("是否及格:%s", res)
    }
    
  2. 三元操作:复杂用法。有些时候我们没有办法直接获取某一个内容的值,因为可能这个值在一个Map或者Struct中保存,而这个Map可能没有这个KEY或者这个Struct指针本身为空。如果使用TrueValue或``FalseValue方法,在赋值时就需要直接获取到内容,这样会报空指针错误,于是我们就需要用到TrueFnFalseFn`方法。

    package main
    
    import (
    	. `fmt`
    	`github.com/aid297/aid/operation/operationV2`
    )
    
    type Condition struct {
    	Score int
    }
    
    func main() {
    	condition := &Condition{Score: 85}
    
    	res := operationV2.NewTernary(
    		operationV2.TrueValue("及格"),
    		operationV2.FalseValue("不及格"),
    	).GetByValue(condition != nil && condition.Score >= 60)
    
    	Printf("是否及格:%s", res)
    
    	conditionMap := map[string]int{"分数": 70}
    
    	res2 := operationV2.NewTernary(
    		operationV2.TrueFn(func() int {
    			score, exist := conditionMap["分数"]
    			if !exist {
    				return 0
    			}
    			return score
    		}),
    		operationV2.FalseValue(0),
    	).GetByFunc(func() bool { return condition != nil })
    
    	Printf("是否及格2:%s\n", res2)
    }
    
  3. 多元操作:多元操作通常场景在于启动程序时,我们需要确定程序的配置文件。如下所示,我们设计优先级为:终端参数 > 环境变量 > 默认参数。判断条件为:参数不为空。

    package main
    
    import (
    	. `fmt`
    
    	`github.com/aid297/aid/operation/operationV2`
    )
    
    func main() {
    	m := operationV2.NewMultivariate[string]().
    		Append(operationV2.MultivariateAttr[string]{Item: "a", HitFunc: func(_ int, _ string) { Printf("采用高级") }}). // A 最高优先级:终端命令
    		Append(operationV2.MultivariateAttr[string]{Item: "b", HitFunc: func(idx int, item string) { Printf("采用次高级") }}). // B 次高优先级:全局变量
    		SetDefault(operationV2.MultivariateAttr[string]{Item: "c"}) // 设置默认值
    
    	_, f := m.Finally(func(item string) bool { return item != "" })
    
    	if f != "a" {
    		panic(Errorf("错误:%s", f))
    	}
    	Printf("成功:%s", f)
    }
    

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func OrError

func OrError(target bool, trueValue, falseValue error) error

OrError 三元运算符 → 处理错误

Types

type AttrFalseFn

type AttrFalseFn[T any] struct {
	// contains filtered or unexported fields
}

func FalseFn

func FalseFn[T any](falseFn func() T) AttrFalseFn[T]

func (AttrFalseFn[T]) Register

func (my AttrFalseFn[T]) Register(ternary *Ternary[T])

type AttrFalseValue

type AttrFalseValue[T any] struct {
	// contains filtered or unexported fields
}

func FalseValue

func FalseValue[T any](falseValue T) AttrFalseValue[T]

func (AttrFalseValue[T]) Register

func (my AttrFalseValue[T]) Register(ternary *Ternary[T])

type AttrTrueFn

type AttrTrueFn[T any] struct {
	// contains filtered or unexported fields
}

func TrueFn

func TrueFn[T any](trueFn func() T) AttrTrueFn[T]

func (AttrTrueFn[T]) Register

func (my AttrTrueFn[T]) Register(ternary *Ternary[T])

type AttrTrueValue

type AttrTrueValue[T any] struct {
	// contains filtered or unexported fields
}

func TrueValue

func TrueValue[T any](trueValue T) AttrTrueValue[T]

func (AttrTrueValue[T]) Register

func (my AttrTrueValue[T]) Register(ternary *Ternary[T])

type Multivariate added in v1.64.1

type Multivariate[T any] struct {
	Items   anySlice.AnySlicer[MultivariateAttr[T]]
	Default MultivariateAttr[T]
}

func NewMultivariate added in v1.64.1

func NewMultivariate[T any]() *Multivariate[T]

NewMultivariate 实例化:多元运算

func (*Multivariate[T]) Append added in v1.64.18

func (my *Multivariate[T]) Append(item MultivariateAttr[T]) *Multivariate[T]

Append 添加优先级项

func (*Multivariate[T]) Finally added in v1.64.17

func (my *Multivariate[T]) Finally(condition func(item T) bool) (int, T)

Finally 获取优先级选项

func (*Multivariate[T]) SetDefault added in v1.64.1

func (my *Multivariate[T]) SetDefault(item MultivariateAttr[T]) *Multivariate[T]

SetDefault 设置默认值

type MultivariateAttr added in v1.64.19

type MultivariateAttr[T any] struct {
	Item    T
	HitFunc func(idx int, item T)
}

type Multivariater added in v1.64.17

type Multivariater[T any] interface {
	Append(items MultivariateAttr[T]) Multivariater[T]
	Finally(fn func(item T) bool) (int, T)
	SetDefault(item MultivariateAttr[T]) Multivariater[T]
}

type Ternary

type Ternary[T any] struct {
	// contains filtered or unexported fields
}

func NewTernary

func NewTernary[T any](attrs ...TernaryAttributer[T]) Ternary[T]

NewTernary 实例化:三元运算

func (Ternary[T]) DoByFunc

func (t Ternary[T]) DoByFunc(condition func() bool)

DoByFunc 执行回调 → 通过函数

func (Ternary[T]) DoByValue

func (t Ternary[T]) DoByValue(condition bool)

DoByValue 执行回调 → 通过值

func (Ternary[T]) GetByFunc

func (t Ternary[T]) GetByFunc(condition func() bool) T

GetByFunc 获取值 → 通过函数

func (Ternary[T]) GetByValue

func (t Ternary[T]) GetByValue(condition bool) T

GetByValue 获取值 → 通过值

func (Ternary[T]) Set

func (t Ternary[T]) Set(attrs ...TernaryAttributer[T]) Ternary[T]

type TernaryAttributer

type TernaryAttributer[T any] interface {
	Register(ternary *Ternary[T])
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL